Conversation
e3e14de to
74bd8db
Compare
pnpm currently runs the post install scripts of dependencies immediately once their resources were downloaded and does that asynchronously. npm runs all the post install scripts once all the resources were downloaded and does that sequentially. This changes makes pnpm run the scripts similarly to how npm runs them close #337
Contributor
|
Lgtm |
Errors were sometimes happening on NodeJS 4. On NodeJS >= 6.3.0 there were no errors because chmode was made on a proxy which was created by link_bins. PR #345
Member
Author
|
Great, this change allows to fix another issue as well. |
Member
Author
|
And I believe the number of filesystem operations can be decreased now, but I won't do that refactoring in scope of this pull request. This is ready to be published, I believe |
pull Bot
pushed a commit
to dwongdev/pnpm
that referenced
this pull request
May 14, 2026
pnpm#349) * feat(reporter): add NDJSON reporting engine with pnpm:stage smoke test Introduces `pacquet-reporter` carrying the typed `LogEvent` enum, the no-`self` `Reporter` capability trait per pnpm#339, and `NdjsonReporter` / `SilentReporter` implementations. Adds the `--reporter=ndjson|silent` flag and threads a `R: Reporter` generic through `Install::run`, emitting `pnpm:stage` `importing_started` / `importing_done` to bracket the install — one channel wired end-to-end as a smoke test for the schema-mirror approach. The wire format mirrors what `@pnpm/core-loggers` defines and `@pnpm/cli.default-reporter` consumes under `pnpm --reporter=ndjson`. Engine only. The JS-reporter spawn-and-pipe (`--reporter=default`), the backfill of missing log events in already-ported code (pnpm#347), and the porting convention in AGENTS.md (pnpm#346) land in follow-up PRs. The default reporter is `silent` until the spawn-and-pipe exists, so user- facing output is unchanged. Refs pnpm#345. Design: pnpm#344. * docs(package-manager): name pnpm's `lockfileDir` and link findWorkspaceDir Upstream emits stage events with `prefix: lockfileDir` — the directory holding `pnpm-lock.yaml`, which collapses to the workspace root when a workspace is present. The previous comment described the *result* in pacquet's no-workspace world but didn't name the upstream concept or point at the helper to mirror once workspaces land. Replacing the comment with a TODO that links `findWorkspaceDir` makes the migration path explicit so the next person editing this site doesn't have to re-derive it. No behavior change. * fix(cli): make --reporter accepted on either side of the subcommand Adding `global = true` to the clap attribute lets users write either `pacquet --reporter=ndjson install` or `pacquet install --reporter=ndjson`, matching pnpm. Without it the flag is parsed by the top-level `CliArgs` only, so a sub-command-side use ("pacquet install --reporter=...") produced "unexpected argument '--reporter' found". * refactor(reporter,package-manager): apply review fixes from pnpm#349 Address feedback on the reporter PR. reporter: - Drop the dependency-injection issue link (pnpm#339) from `Reporter`, the recording-fake test, and the module-level docs; convention is visible from the code. - Wrap `bunyan` and `bole` references as markdown links. - Demote `Envelope`'s `#[serde(flatten)]` rationale to a regular `//` comment so private impl detail isn't part of `///` rustdoc. - Introduce `pub trait EnvVar` + `pub struct RealEnvVar` (reporter- local capability trait) and split `hostname` into a generic `resolve_hostname<E>` plus a non-generic cached production wrapper. Add four unit tests covering `HOSTNAME`, `COMPUTERNAME` fallback, precedence, and the unset case. - Switch the wire-shape test to `pipe-trait`; add `pipe-trait` to dev-dependencies. - Fix intra-link rule violation in the `SilentReporter` test doc. package-manager: - Tighten the install `prefix` extraction to fail loudly on non-UTF-8 / parentless manifest paths instead of silently emitting an empty string. Workspace-aware resolution tracked at pnpm#357. - Replace `concat!` YAML literals in two tests with `text_block_macros::text_block!`; add as dev-dependency. - Convert bare-prose identifiers in `install_emits_stage_events_bracketing_the_run` to intra-doc links; drop the recording-fake DI prose. Long inline `mod tests` extraction tracked at pnpm#358. * fix(reporter): drop private-item link from `EnvVar` public doc `EnvVar` is `pub` but `resolve_hostname` is private; rustdoc rejects the intra-link with `-D rustdoc::private-intra-doc-links` (the rule added to `CODE_STYLE_GUIDE.md` in pnpm#351). Rephrase the doc to talk about "env-dependent helpers" generally without naming the private function. * refactor(reporter): switch hostname to gethostname syscall + DI capability Address the second round of review feedback on pnpm#349. reporter: - Replace env-var-based hostname (HOSTNAME / COMPUTERNAME) with the real gethostname(2) syscall via the `gethostname` crate. The env-var approach was unsound: shells set `HOST` (zsh) or `HOSTNAME` (bash) as private variables that don't propagate to spawned binaries, so a packaged `pacquet` would have observed an empty hostname in most production environments. - Introduce `pub trait GetHostName` + `pub struct RealApi`. Real resolution lives in `RealApi::get_host_name`. Tests can supply their own impl. - Cache the production value in `static HOSTNAME: LazyLock<String> = LazyLock::new(RealApi::get_host_name)`. The wire emit path reads `&HOSTNAME` directly; the previous `hostname()` wrapper is no longer needed. - Drop the now-redundant `EnvVar` trait, `RealEnvVar`, `resolve_hostname`, and the four env-resolution unit tests (those scenarios no longer exist after the syscall switch). reporter test layout: - Move the tests module into its own file at `crates/reporter/src/tests.rs` per the unit-test-layout rule in `CODE_STYLE_GUIDE.md`. Drop `use super::*` in favor of explicit merged imports of just the items the tests touch. - Two new tests: `get_host_name_capability_is_mockable` (proves the trait dispatch works for fakes) and `real_api_returns_a_non_empty_host_name` (smoke-checks the real syscall path). Documentation style: - Restructure the workspace-prefix and stage-bracketing comments to drop em dashes per `CONTRIBUTING.md`'s writing-style guidance and to render `bunyan` as a markdown link. - Fix the `@pnpm/core-loggers` link to point at the package directory rather than its `src` subdirectory. Imports: - Replace seven occurrences of `pacquet_reporter::SilentReporter` qualified at the call site with a single `use pacquet_reporter:: SilentReporter` in the test module.
pull Bot
pushed a commit
to dwongdev/pnpm
that referenced
this pull request
May 14, 2026
Adds the `Context` variant to `LogEvent` (camelCase serde so the wire shape matches `@pnpm/cli.default-reporter`'s expectations) and emits it once from `Install::run`, immediately before `pnpm:stage importing_started`. Mirrors pnpm's emit at https://github.com/pnpm/pnpm/blob/086c5e91e8/installing/context/src/index.ts#L196. `currentLockfileExists` is hard-coded `false` for now because pacquet doesn't read or write `node_modules/.pnpm/lock.yaml` yet. The site carries a TODO so the value gets flipped when that path lands. Test: extends the existing recording-fake DI test (per pnpm#339) to assert the full event sequence (`Context`, `ImportingStarted`, `ImportingDone`) and spot-checks the context payload's directory fields. Verified the test catches the regression by temporarily commenting out the emit and confirming a fail; restored. Refs pnpm#347. Engine: pnpm#345.
pull Bot
pushed a commit
to dwongdev/pnpm
that referenced
this pull request
May 14, 2026
* feat(reporter): emit pnpm:summary at install end Adds the `Summary` variant to `LogEvent` and emits it from `Install::run` immediately after `pnpm:stage importing_done`. Mirrors pnpm's emit at https://github.com/pnpm/pnpm/blob/086c5e91e8/installing/deps-installer/src/install/index.ts#L1663. The payload carries only `prefix`; the reporter combines this with the accumulated `pnpm:root` events (still TODO under pnpm#347) to render the final "+N -M" diff block. Test: extends the install integration test (renamed to `install_emits_pnpm_event_sequence` to match the growing scope) to assert the four-event success sequence (`Context`, `ImportingStarted`, `ImportingDone`, `Summary`) and spot-checks summary's `prefix`. Verified the test catches the regression by temporarily commenting out the emit and confirming it failed with a Summary-shaped gap. Refs pnpm#347. Engine: pnpm#345. Previous channel: pnpm#354. * docs(reporter): clarify SummaryLog payload comment Per review feedback on pnpm#355: the original wording said the `pnpm:summary` payload "is just `prefix`", which omitted the `level` field that's also part of the serialized record. `level` is the bunyan-envelope severity carried by every channel, not channel-specific to summary; say so explicitly so a reader doesn't try to "fix" the struct based on the comment. Same fix applied to the wire-shape test's doc comment.
github-actions Bot
pushed a commit
to Eyalm321/pnpm
that referenced
this pull request
May 18, 2026
pnpm#349) * feat(reporter): add NDJSON reporting engine with pnpm:stage smoke test Introduces `pacquet-reporter` carrying the typed `LogEvent` enum, the no-`self` `Reporter` capability trait per pnpm#339, and `NdjsonReporter` / `SilentReporter` implementations. Adds the `--reporter=ndjson|silent` flag and threads a `R: Reporter` generic through `Install::run`, emitting `pnpm:stage` `importing_started` / `importing_done` to bracket the install — one channel wired end-to-end as a smoke test for the schema-mirror approach. The wire format mirrors what `@pnpm/core-loggers` defines and `@pnpm/cli.default-reporter` consumes under `pnpm --reporter=ndjson`. Engine only. The JS-reporter spawn-and-pipe (`--reporter=default`), the backfill of missing log events in already-ported code (pnpm#347), and the porting convention in AGENTS.md (pnpm#346) land in follow-up PRs. The default reporter is `silent` until the spawn-and-pipe exists, so user- facing output is unchanged. Refs pnpm#345. Design: pnpm#344. * docs(package-manager): name pnpm's `lockfileDir` and link findWorkspaceDir Upstream emits stage events with `prefix: lockfileDir` — the directory holding `pnpm-lock.yaml`, which collapses to the workspace root when a workspace is present. The previous comment described the *result* in pacquet's no-workspace world but didn't name the upstream concept or point at the helper to mirror once workspaces land. Replacing the comment with a TODO that links `findWorkspaceDir` makes the migration path explicit so the next person editing this site doesn't have to re-derive it. No behavior change. * fix(cli): make --reporter accepted on either side of the subcommand Adding `global = true` to the clap attribute lets users write either `pacquet --reporter=ndjson install` or `pacquet install --reporter=ndjson`, matching pnpm. Without it the flag is parsed by the top-level `CliArgs` only, so a sub-command-side use ("pacquet install --reporter=...") produced "unexpected argument '--reporter' found". * refactor(reporter,package-manager): apply review fixes from pnpm#349 Address feedback on the reporter PR. reporter: - Drop the dependency-injection issue link (pnpm#339) from `Reporter`, the recording-fake test, and the module-level docs; convention is visible from the code. - Wrap `bunyan` and `bole` references as markdown links. - Demote `Envelope`'s `#[serde(flatten)]` rationale to a regular `//` comment so private impl detail isn't part of `///` rustdoc. - Introduce `pub trait EnvVar` + `pub struct RealEnvVar` (reporter- local capability trait) and split `hostname` into a generic `resolve_hostname<E>` plus a non-generic cached production wrapper. Add four unit tests covering `HOSTNAME`, `COMPUTERNAME` fallback, precedence, and the unset case. - Switch the wire-shape test to `pipe-trait`; add `pipe-trait` to dev-dependencies. - Fix intra-link rule violation in the `SilentReporter` test doc. package-manager: - Tighten the install `prefix` extraction to fail loudly on non-UTF-8 / parentless manifest paths instead of silently emitting an empty string. Workspace-aware resolution tracked at pnpm#357. - Replace `concat!` YAML literals in two tests with `text_block_macros::text_block!`; add as dev-dependency. - Convert bare-prose identifiers in `install_emits_stage_events_bracketing_the_run` to intra-doc links; drop the recording-fake DI prose. Long inline `mod tests` extraction tracked at pnpm#358. * fix(reporter): drop private-item link from `EnvVar` public doc `EnvVar` is `pub` but `resolve_hostname` is private; rustdoc rejects the intra-link with `-D rustdoc::private-intra-doc-links` (the rule added to `CODE_STYLE_GUIDE.md` in pnpm#351). Rephrase the doc to talk about "env-dependent helpers" generally without naming the private function. * refactor(reporter): switch hostname to gethostname syscall + DI capability Address the second round of review feedback on pnpm#349. reporter: - Replace env-var-based hostname (HOSTNAME / COMPUTERNAME) with the real gethostname(2) syscall via the `gethostname` crate. The env-var approach was unsound: shells set `HOST` (zsh) or `HOSTNAME` (bash) as private variables that don't propagate to spawned binaries, so a packaged `pacquet` would have observed an empty hostname in most production environments. - Introduce `pub trait GetHostName` + `pub struct RealApi`. Real resolution lives in `RealApi::get_host_name`. Tests can supply their own impl. - Cache the production value in `static HOSTNAME: LazyLock<String> = LazyLock::new(RealApi::get_host_name)`. The wire emit path reads `&HOSTNAME` directly; the previous `hostname()` wrapper is no longer needed. - Drop the now-redundant `EnvVar` trait, `RealEnvVar`, `resolve_hostname`, and the four env-resolution unit tests (those scenarios no longer exist after the syscall switch). reporter test layout: - Move the tests module into its own file at `crates/reporter/src/tests.rs` per the unit-test-layout rule in `CODE_STYLE_GUIDE.md`. Drop `use super::*` in favor of explicit merged imports of just the items the tests touch. - Two new tests: `get_host_name_capability_is_mockable` (proves the trait dispatch works for fakes) and `real_api_returns_a_non_empty_host_name` (smoke-checks the real syscall path). Documentation style: - Restructure the workspace-prefix and stage-bracketing comments to drop em dashes per `CONTRIBUTING.md`'s writing-style guidance and to render `bunyan` as a markdown link. - Fix the `@pnpm/core-loggers` link to point at the package directory rather than its `src` subdirectory. Imports: - Replace seven occurrences of `pacquet_reporter::SilentReporter` qualified at the call site with a single `use pacquet_reporter:: SilentReporter` in the test module.
github-actions Bot
pushed a commit
to Eyalm321/pnpm
that referenced
this pull request
May 18, 2026
Adds the `Context` variant to `LogEvent` (camelCase serde so the wire shape matches `@pnpm/cli.default-reporter`'s expectations) and emits it once from `Install::run`, immediately before `pnpm:stage importing_started`. Mirrors pnpm's emit at https://github.com/pnpm/pnpm/blob/086c5e91e8/installing/context/src/index.ts#L196. `currentLockfileExists` is hard-coded `false` for now because pacquet doesn't read or write `node_modules/.pnpm/lock.yaml` yet. The site carries a TODO so the value gets flipped when that path lands. Test: extends the existing recording-fake DI test (per pnpm#339) to assert the full event sequence (`Context`, `ImportingStarted`, `ImportingDone`) and spot-checks the context payload's directory fields. Verified the test catches the regression by temporarily commenting out the emit and confirming a fail; restored. Refs pnpm#347. Engine: pnpm#345.
github-actions Bot
pushed a commit
to Eyalm321/pnpm
that referenced
this pull request
May 18, 2026
* feat(reporter): emit pnpm:summary at install end Adds the `Summary` variant to `LogEvent` and emits it from `Install::run` immediately after `pnpm:stage importing_done`. Mirrors pnpm's emit at https://github.com/pnpm/pnpm/blob/086c5e91e8/installing/deps-installer/src/install/index.ts#L1663. The payload carries only `prefix`; the reporter combines this with the accumulated `pnpm:root` events (still TODO under pnpm#347) to render the final "+N -M" diff block. Test: extends the install integration test (renamed to `install_emits_pnpm_event_sequence` to match the growing scope) to assert the four-event success sequence (`Context`, `ImportingStarted`, `ImportingDone`, `Summary`) and spot-checks summary's `prefix`. Verified the test catches the regression by temporarily commenting out the emit and confirming it failed with a Summary-shaped gap. Refs pnpm#347. Engine: pnpm#345. Previous channel: pnpm#354. * docs(reporter): clarify SummaryLog payload comment Per review feedback on pnpm#355: the original wording said the `pnpm:summary` payload "is just `prefix`", which omitted the `level` field that's also part of the serialized record. `level` is the bunyan-envelope severity carried by every channel, not channel-specific to summary; say so explicitly so a reader doesn't try to "fix" the struct based on the comment. Same fix applied to the wire-shape test's doc comment.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
pnpm currently runs the post install scripts of dependencies immediately once their resources were downloaded and does that asynchronously.
npm runs all the post install scripts once all the resources were downloaded and does that sequentially.
This changes makes pnpm run the scripts similarly to how npm runs them
Solves #337