Skip to content

fix(pacquet): shorten long virtual store dirnames to avoid ENAMETOOLONG#11768

Merged
zkochan merged 3 commits into
mainfrom
pacquet-issue
May 20, 2026
Merged

fix(pacquet): shorten long virtual store dirnames to avoid ENAMETOOLONG#11768
zkochan merged 3 commits into
mainfrom
pacquet-issue

Conversation

@zkochan

@zkochan zkochan commented May 20, 2026

Copy link
Copy Markdown
Member

Summary

  • Peer-heavy snapshot keys produced flat-name virtual-store directories that overflowed macOS's 255-byte filename limit, so install aborted with Failed to recursively create … File name too long (os error 63) before unpacking any tarballs. The user-reported case was a Vitest install with ~10 browser / coverage / DOM peers in the suffix.
  • Port the trailing length / case-shortening branch of upstream's depPathToFilename so the dirname becomes <prefix>_<32-hex-sha256> capped at virtualStoreDirMaxLength bytes (default 120). Applies to both PkgNameVerPeer::to_virtual_store_name (lockfile path) and PackageVersion::to_virtual_store_name (no-lockfile path).
  • Extract create_short_hash and shorten_virtual_store_name into a new pacquet-crypto-hash crate mirroring upstream @pnpm/crypto.hash. pacquet-lockfile, pacquet-registry, and pacquet-store-dir consume it instead of duplicating the sha2 + truncate logic.

Out of scope (follow-up)

virtualStoreDirMaxLength is currently read from the DEFAULT_VIRTUAL_STORE_DIR_MAX_LENGTH = 120 constant at the callers. Adding a Config field so users can override it via .npmrc / workspace yaml is a single-site swap once the plumbing exists — left out to keep this PR scoped to the reported bug.

Test plan

  • cargo nextest run --workspace — 1558/1558 pass
  • cargo clippy --locked --workspace --all-targets -- --deny warnings — clean
  • cargo check --locked --workspace --all-targets — clean
  • New to_virtual_store_name_shortens_user_reported_vitest_case test in pacquet-lockfile reproduces the reported snapshot key and asserts the shortened name is exactly max_length bytes with a 32-hex-char trailing hash.
  • New shorten_* tests in pacquet-crypto-hash cover identity (below threshold), exact-length shortening (above threshold), and the file+ case-guard escape.

Written by an agent (Claude Code, claude-opus-4-7).

Summary by CodeRabbit

  • New Features
    • Added configurable virtualStoreDirMaxLength setting (default: 120 characters) for virtual store directory naming
    • Virtual store names are now automatically shortened when exceeding the configured length limit
    • Configuration can be set via pnpm-workspace.yaml or the PNPM_CONFIG_VIRTUAL_STORE_DIR_MAX_LENGTH environment variable

Review Change Stack

@coderabbitai

coderabbitai Bot commented May 20, 2026

Copy link
Copy Markdown
📝 Walkthrough

Walkthrough

This PR adds configurable length limits for virtual store directory names. A new pacquet-crypto-hash crate provides SHA-256-based shortening. The config system exposes virtual_store_dir_max_length (default 120) via environment variables and workspace YAML. This limit is threaded through package name escaping and virtual store layout computations. Install flows apply shortening, and the limit is persisted into .modules.yaml manifests.

Changes

Virtual Store Name Length Limiting

Layer / File(s) Summary
Crypto-hash crate and config foundation
Cargo.toml, pacquet/crates/crypto-hash/*, pacquet/crates/config/src/defaults.rs, pacquet/crates/config/src/lib.rs, pacquet/crates/config/src/env_overlay.rs, pacquet/crates/config/src/workspace_yaml.rs
A new pacquet-crypto-hash crate provides create_short_hash (SHA-256 truncated to 32 chars) and shorten_virtual_store_name (length-bounded with case-collision handling). Config system gains virtual_store_dir_max_length: u64 field with default 120, environment variable support, and workspace YAML mapping. Configuration cascade: default → workspace YAML → env var.
Lockfile package name shortening
pacquet/crates/lockfile/Cargo.toml, pacquet/crates/lockfile/src/pkg_name_ver_peer.rs, pacquet/crates/lockfile/src/pkg_name_ver_peer/tests.rs
PkgNameVerPeer::to_virtual_store_name now accepts max_length parameter and applies shorten_virtual_store_name for bounded naming. Existing test updated to pass DEFAULT_MAX_LENGTH (120); new regression test validates long vitest snapshot keys are shortened to exactly 120 chars with 32-char hex hash suffix.
Virtual store layout length threading
pacquet/crates/package-manager/src/virtual_store_layout.rs
VirtualStoreLayout struct gains virtual_store_dir_max_length: usize field and threads it through all slot-path computations. legacy constructor signature changes from single argument to require virtual_store_dir_max_length. slot_dir fallback now passes self.virtual_store_dir_max_length to to_virtual_store_name calls.
Install flows and manifest integration
pacquet/crates/package-manager/Cargo.toml, pacquet/crates/package-manager/src/install_package_from_registry.rs, pacquet/crates/package-manager/src/install_package_from_registry/tests.rs, pacquet/crates/package-manager/src/install_without_lockfile.rs, pacquet/crates/package-manager/src/install.rs
Registry and without-lockfile install flows use shorten_virtual_store_name to compute bounded directory names. Legacy layout construction passes config.virtual_store_dir_max_length. build_modules_manifest persists configured virtual_store_dir_max_length into on-disk .modules.yaml instead of constant. Test helper create_config initializes the field.
Test infrastructure and regression coverage
pacquet/crates/package-manager/src/build_modules/tests.rs, pacquet/crates/package-manager/src/create_symlink_layout/tests.rs, pacquet/crates/package-manager/src/create_virtual_dir_by_snapshot/tests.rs, pacquet/crates/package-manager/src/hoist/tests.rs, pacquet/crates/package-manager/src/link_bins/tests.rs, pacquet/crates/package-manager/src/symlink_direct_dependencies/tests.rs
All test sites updated consistently: VirtualStoreLayout::legacy(...) calls now include pacquet_config::default_virtual_store_dir_max_length() as usize parameter across policy gates, optional dependencies, side-effects caching, write paths, patch handling, link-bin scenarios, and symlink resolution tests.
Unused code removal
pacquet/crates/registry/src/package_version.rs
Removes PackageVersion::to_virtual_store_name method, which is no longer called after install flows consolidate to PkgNameVerPeer-based naming.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~60 minutes

Possibly related issues

  • pnpm/pacquet#432: The PR directly implements the create_short_hash and project registry integration needed for global virtual store support, addressing the requirements from this issue to consolidate hash computation and enable length-bounded directory naming.

Possibly related PRs

  • pnpm/pnpm#11752: Both PRs extend the pacquet/crates/config environment-variable pipeline—specifically WorkspaceSettings::from_pnpm_config_env in env_overlay.rs—so the main PR's VIRTUAL_STORE_DIR_MAX_LENGTH env handling is directly tied to this broader PNPM_CONFIG_* env-var parsing refactor.
  • pnpm/pnpm#11760: Both PRs modify how pacquet/crates/package-manager/src/install_package_from_registry.rs computes the virtual-store directory name; the retrieved PR refactors pre-resolved materialization while the main PR enforces config.virtual_store_dir_max_length via shorten_virtual_store_name.

Suggested labels

area: global virtual store, area: lockfile, area: config

Poem

🐰 A crypto hash we conjure up,

Shortening names from overflow cup,

One-twenty chars, a boundless quest,

Virtual stores at their finest best,

Config cascades, tests complete,

Long paths now fit—oh so neat! 🎉

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly and concisely describes the main change: shortening long virtual-store directory names to prevent ENAMETOOLONG errors.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch pacquet-issue

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@codecov-commenter

codecov-commenter commented May 20, 2026

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 94.61538% with 7 lines in your changes missing coverage. Please review.
✅ Project coverage is 89.98%. Comparing base (097983f) to head (7873b97).
⚠️ Report is 1 commits behind head on main.

Files with missing lines Patch % Lines
...crates/package-manager/src/virtual_store_layout.rs 81.48% 5 Missing ⚠️
pacquet/crates/crypto-hash/src/lib.rs 95.91% 2 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##             main   #11768      +/-   ##
==========================================
+ Coverage   89.93%   89.98%   +0.05%     
==========================================
  Files         154      155       +1     
  Lines       18007    18114     +107     
==========================================
+ Hits        16194    16300     +106     
- Misses       1813     1814       +1     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions

github-actions Bot commented May 20, 2026

Copy link
Copy Markdown
Contributor

Micro-Benchmark Results

Linux

group                          main                                   pr
-----                          ----                                   --
tarball/download_dependency    1.09      8.3±0.28ms   522.1 KB/sec    1.00      7.6±0.33ms   569.1 KB/sec

zkochan added 2 commits May 20, 2026 14:54
Peer-heavy snapshot keys (e.g. vitest with a dozen browser / coverage /
DOM peers) produced flat-name directories that overflowed macOS's 255-
byte filename limit, so `install` aborted with errno 63 before unpacking
any tarballs. Port the trailing length / case-shortening branch of
upstream's `depPathToFilename` (deps/path/src/index.ts:169) so the name
becomes `<prefix>_<32-hex-sha256>` capped at `virtualStoreDirMaxLength`
bytes (default 120).

Extract `create_short_hash` and `shorten_virtual_store_name` into a new
`pacquet-crypto-hash` crate mirroring upstream `@pnpm/crypto.hash`;
`pacquet-lockfile`, `pacquet-registry`, and `pacquet-store-dir` all
consume it instead of duplicating the sha2 + truncate logic.

Reported via pnpm/pacquet issue triage (vitest@4.1.6 peer suffix).
Format `pacquet/crates/crypto-hash/Cargo.toml` per the workspace
`.taplo.toml` (aligns the `[package]` keys) and downgrade the
`pacquet_modules_yaml::DEFAULT_VIRTUAL_STORE_DIR_MAX_LENGTH` reference
in `PkgNameVerPeer::to_virtual_store_name` to plain text, since
`pacquet-lockfile` deliberately does not depend on
`pacquet-modules-yaml` and `RUSTDOCFLAGS=-D warnings` rejected the
unresolved intra-doc link.
@github-actions

github-actions Bot commented May 20, 2026

Copy link
Copy Markdown
Contributor

Integrated-Benchmark Report (Linux)

Scenario: Frozen Lockfile

Command Mean [s] Min [s] Max [s] Relative
pacquet@HEAD 2.443 ± 0.217 2.299 3.042 1.05 ± 0.10
pacquet@main 2.325 ± 0.097 2.257 2.577 1.00
pnpm 4.586 ± 0.046 4.515 4.651 1.97 ± 0.08
BENCHMARK_REPORT.json
{
  "results": [
    {
      "command": "pacquet@HEAD",
      "mean": 2.4428504901999997,
      "stddev": 0.2169481811700777,
      "median": 2.3724090458999996,
      "user": 2.78989724,
      "system": 3.6118519,
      "min": 2.2993316974,
      "max": 3.0421766604,
      "times": [
        2.4095643073999997,
        2.3434474664,
        2.3662291933999997,
        2.4767670323999997,
        3.0421766604,
        2.4298565803999996,
        2.3785888984,
        2.3204860984,
        2.3620569674,
        2.2993316974
      ]
    },
    {
      "command": "pacquet@main",
      "mean": 2.3251214987,
      "stddev": 0.0966415628682156,
      "median": 2.2852429349,
      "user": 2.7786572400000003,
      "system": 3.5587659,
      "min": 2.2571990023999997,
      "max": 2.5767866163999997,
      "times": [
        2.2827723744,
        2.3230867764,
        2.2770417043999998,
        2.3834999164,
        2.5767866163999997,
        2.2877134954,
        2.3318645314,
        2.2571990023999997,
        2.2713614544,
        2.2598891154
      ]
    },
    {
      "command": "pnpm",
      "mean": 4.586033402299999,
      "stddev": 0.045771362995379976,
      "median": 4.5818556058999995,
      "user": 7.753002439999999,
      "system": 4.0521396,
      "min": 4.514921086399999,
      "max": 4.6514738804,
      "times": [
        4.6514738804,
        4.636358298399999,
        4.5523171564,
        4.6470819624,
        4.5823375654,
        4.5589689964,
        4.5862313324,
        4.5492700984,
        4.514921086399999,
        4.5813736463999994
      ]
    }
  ]
}

Scenario: Frozen Lockfile (Hot Cache)

Command Mean [ms] Min [ms] Max [ms] Relative
pacquet@HEAD 703.2 ± 28.0 680.7 778.1 1.00
pacquet@main 725.5 ± 37.2 685.8 791.3 1.03 ± 0.07
pnpm 2384.0 ± 59.0 2307.2 2515.6 3.39 ± 0.16
BENCHMARK_REPORT.json
{
  "results": [
    {
      "command": "pacquet@HEAD",
      "mean": 0.7032270471600001,
      "stddev": 0.027999362900379514,
      "median": 0.6949587676600001,
      "user": 0.37231,
      "system": 1.5996625999999998,
      "min": 0.68068759166,
      "max": 0.7780875236600001,
      "times": [
        0.7780875236600001,
        0.6931392986600001,
        0.7133309606600001,
        0.68068759166,
        0.6999790786600001,
        0.69194673766,
        0.6919741136600001,
        0.69677823666,
        0.70393333966,
        0.6824135906600001
      ]
    },
    {
      "command": "pacquet@main",
      "mean": 0.7254999197600001,
      "stddev": 0.03717847471667518,
      "median": 0.7182915676600001,
      "user": 0.37624099999999994,
      "system": 1.6095529999999996,
      "min": 0.6858013476600001,
      "max": 0.7913330026600001,
      "times": [
        0.7637004886600001,
        0.7913330026600001,
        0.6858013476600001,
        0.7348937896600001,
        0.6970871986600001,
        0.7519483596600001,
        0.7472032016600001,
        0.7016893456600001,
        0.68824249266,
        0.6930999706600001
      ]
    },
    {
      "command": "pnpm",
      "mean": 2.3840229631600005,
      "stddev": 0.05903119502592309,
      "median": 2.37115541016,
      "user": 2.988654,
      "system": 2.1929297999999995,
      "min": 2.3072265346600003,
      "max": 2.51561509466,
      "times": [
        2.51561509466,
        2.4216352696600003,
        2.3703252896600002,
        2.4254026586600004,
        2.3072265346600003,
        2.35822760966,
        2.37198553066,
        2.36309399766,
        2.3241657956600004,
        2.38255185066
      ]
    }
  ]
}

Add `virtual_store_dir_max_length: u64` to `Config` with default 120
(matching `pacquet_modules_yaml::DEFAULT_VIRTUAL_STORE_DIR_MAX_LENGTH`).
Wire it through `WorkspaceSettings.virtualStoreDirMaxLength` and the
`PNPM_CONFIG_VIRTUAL_STORE_DIR_MAX_LENGTH` env-overlay so users can
override the threshold via `pnpm-workspace.yaml`, global `config.yaml`,
or environment variables — mirroring upstream
`Config.virtualStoreDirMaxLength`.

The three flat-name call sites (`install_without_lockfile.rs`,
`install_package_from_registry.rs`, `virtual_store_layout.rs`) and the
`.modules.yaml` writer now read the configured value instead of the
hardcoded constant. `VirtualStoreLayout::legacy` takes the value as an
explicit second arg so test fixtures don't silently inherit a default.
@zkochan zkochan marked this pull request as ready for review May 20, 2026 13:24

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@pacquet/crates/crypto-hash/src/lib.rs`:
- Around line 63-69: The code appends "_<32-hex-hash>" unconditionally which can
exceed max_length when max_length < 33; change the logic in the function using
max_length, filename, and create_short_hash so that if max_length <= 33 you
return a portion of the hex hash that fits (no leading underscore) truncated to
max_length (hex is ASCII so simple slicing is fine), otherwise keep the existing
behavior: compute cap = max_length.saturating_sub(33), pick a char-boundary-safe
filename prefix using boundary on filename, then format!("{}_{}", prefix, hash).
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 7a9b814f-b7fb-4b79-a400-4412a8147a12

📥 Commits

Reviewing files that changed from the base of the PR and between ef87f3c and 7873b97.

⛔ Files ignored due to path filters (1)
  • Cargo.lock is excluded by !**/*.lock
📒 Files selected for processing (25)
  • Cargo.toml
  • pacquet/crates/config/src/defaults.rs
  • pacquet/crates/config/src/env_overlay.rs
  • pacquet/crates/config/src/lib.rs
  • pacquet/crates/config/src/workspace_yaml.rs
  • pacquet/crates/crypto-hash/Cargo.toml
  • pacquet/crates/crypto-hash/src/lib.rs
  • pacquet/crates/lockfile/Cargo.toml
  • pacquet/crates/lockfile/src/pkg_name_ver_peer.rs
  • pacquet/crates/lockfile/src/pkg_name_ver_peer/tests.rs
  • pacquet/crates/package-manager/Cargo.toml
  • pacquet/crates/package-manager/src/build_modules/tests.rs
  • pacquet/crates/package-manager/src/create_symlink_layout/tests.rs
  • pacquet/crates/package-manager/src/create_virtual_dir_by_snapshot/tests.rs
  • pacquet/crates/package-manager/src/hoist/tests.rs
  • pacquet/crates/package-manager/src/install.rs
  • pacquet/crates/package-manager/src/install_package_from_registry.rs
  • pacquet/crates/package-manager/src/install_package_from_registry/tests.rs
  • pacquet/crates/package-manager/src/install_without_lockfile.rs
  • pacquet/crates/package-manager/src/link_bins/tests.rs
  • pacquet/crates/package-manager/src/symlink_direct_dependencies/tests.rs
  • pacquet/crates/package-manager/src/virtual_store_layout.rs
  • pacquet/crates/registry/src/package_version.rs
  • pacquet/crates/store-dir/Cargo.toml
  • pacquet/crates/store-dir/src/project_registry.rs
💤 Files with no reviewable changes (1)
  • pacquet/crates/registry/src/package_version.rs
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: ubuntu-latest / Node.js 24 / Test
  • GitHub Check: Run benchmark on ubuntu-latest
🧰 Additional context used
📓 Path-based instructions (1)
pacquet/**/*.rs

📄 CodeRabbit inference engine (pacquet/AGENTS.md)

pacquet/**/*.rs: When porting a function that fires pnpm:<channel> events through globalLogger, logger.debug(), or streamParser.write(), mirror the call site, payload, and ordering so the reporter parses pacquet's NDJSON the same way it parses pnpm's.
Declare a newtype wrapper for branded string types. Do not collapse the brand into a plain String or &str.
If upstream always validates before construction, validate in pacquet's wrapper too. The wrapper must construct only via TryFrom<String> and/or FromStr. Do not provide an infallible public constructor.
If upstream never validates, just brand for type-safety. Expose an infallible From<String> (and From<&str> when convenient).
If upstream occasionally constructs without validation, expose from_str_unchecked as an escape hatch alongside the validating constructor.
Match upstream serde behavior for branded types that cross JSON, YAML, or INI boundaries. Use #[serde(try_from = "String")] for deserialization and #[serde(into = "String")] for serialization.
Use #[derive(derive_more::From)] and #[derive(derive_more::Into)] for mechanical conversion impls. Fall back to manual impl only when conversion needs custom logic.
String-literal unions should become enums, not newtype wrappers. Model closed sets of valid string values as enums.
Template literal types should be treated as branded strings with validation discipline from rules 2-5.
Choose owned vs. borrowed parameters to minimize copies. Widen to the most encompassing type (&Path over &PathBuf, &str over &String) when it doesn't force extra copies.
Prefer Arc::clone(&x) / Rc::clone(&x) over x.clone() for reference-counted types, so the cost is visible at the call site.
Follow Rust API Guidelines for naming conventions.
Do not use star imports inside module bodies. Write use super::{Foo, bar} instead of use super::*;. Two forms stay allowed: external-crate preludes like use rayon::prelude::*; and root-of-module re-...

Files:

  • pacquet/crates/config/src/env_overlay.rs
  • pacquet/crates/package-manager/src/install_package_from_registry/tests.rs
  • pacquet/crates/config/src/defaults.rs
  • pacquet/crates/package-manager/src/install_package_from_registry.rs
  • pacquet/crates/package-manager/src/create_virtual_dir_by_snapshot/tests.rs
  • pacquet/crates/crypto-hash/src/lib.rs
  • pacquet/crates/lockfile/src/pkg_name_ver_peer.rs
  • pacquet/crates/package-manager/src/install_without_lockfile.rs
  • pacquet/crates/package-manager/src/hoist/tests.rs
  • pacquet/crates/lockfile/src/pkg_name_ver_peer/tests.rs
  • pacquet/crates/config/src/workspace_yaml.rs
  • pacquet/crates/package-manager/src/create_symlink_layout/tests.rs
  • pacquet/crates/package-manager/src/link_bins/tests.rs
  • pacquet/crates/package-manager/src/install.rs
  • pacquet/crates/package-manager/src/symlink_direct_dependencies/tests.rs
  • pacquet/crates/config/src/lib.rs
  • pacquet/crates/package-manager/src/build_modules/tests.rs
  • pacquet/crates/package-manager/src/virtual_store_layout.rs
  • pacquet/crates/store-dir/src/project_registry.rs
🔇 Additional comments (24)
Cargo.toml (1)

18-18: LGTM!

pacquet/crates/crypto-hash/Cargo.toml (1)

1-23: LGTM!

pacquet/crates/crypto-hash/src/lib.rs (1)

1-62: LGTM!

Also applies to: 72-118

pacquet/crates/config/src/defaults.rs (1)

220-230: LGTM!

pacquet/crates/config/src/env_overlay.rs (1)

132-132: LGTM!

pacquet/crates/config/src/lib.rs (1)

25-27: LGTM!

Also applies to: 295-314, 2161-2220

pacquet/crates/config/src/workspace_yaml.rs (1)

117-117: LGTM!

Also applies to: 410-410

pacquet/crates/lockfile/Cargo.toml (1)

14-14: LGTM!

pacquet/crates/lockfile/src/pkg_name_ver_peer.rs (1)

2-2: LGTM!

Also applies to: 15-43

pacquet/crates/lockfile/src/pkg_name_ver_peer/tests.rs (1)

4-5: LGTM!

Also applies to: 43-43, 62-85

pacquet/crates/package-manager/src/virtual_store_layout.rs (1)

75-85: LGTM!

Also applies to: 96-101, 175-188, 245-249, 280-285

pacquet/crates/package-manager/Cargo.toml (1)

15-15: LGTM!

pacquet/crates/package-manager/src/install_package_from_registry.rs (1)

8-8: LGTM!

Also applies to: 109-112

pacquet/crates/package-manager/src/install_package_from_registry/tests.rs (1)

33-33: LGTM!

pacquet/crates/package-manager/src/install_without_lockfile.rs (1)

12-12: LGTM!

Also applies to: 311-314, 379-386

pacquet/crates/package-manager/src/install.rs (1)

18-19: LGTM!

Also applies to: 703-703

pacquet/crates/store-dir/Cargo.toml (1)

14-15: LGTM!

pacquet/crates/store-dir/src/project_registry.rs (1)

18-18: LGTM!

pacquet/crates/package-manager/src/build_modules/tests.rs (1)

293-296: LGTM!

Also applies to: 365-368, 425-428, 508-511, 643-646, 710-713, 770-773, 1008-1011, 1120-1123, 1241-1244, 1473-1476, 1582-1585, 1662-1665

pacquet/crates/package-manager/src/create_symlink_layout/tests.rs (1)

49-52: LGTM!

Also applies to: 98-101, 150-153, 189-192, 220-223

pacquet/crates/package-manager/src/create_virtual_dir_by_snapshot/tests.rs (1)

63-66: LGTM!

pacquet/crates/package-manager/src/hoist/tests.rs (1)

401-404: LGTM!

pacquet/crates/package-manager/src/link_bins/tests.rs (1)

52-55: LGTM!

Also applies to: 123-126, 151-154, 192-195, 246-249, 299-302, 327-330, 357-360, 508-511

pacquet/crates/package-manager/src/symlink_direct_dependencies/tests.rs (1)

85-88: LGTM!

Also applies to: 211-214, 295-298, 357-360, 439-442, 507-510, 585-588

Comment thread pacquet/crates/crypto-hash/src/lib.rs
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants