Skip to content

Commit 5450cb4

Browse files
committed
fix(pm): preserve legacy peer CLI default
1 parent 6760a78 commit 5450cb4

1 file changed

Lines changed: 30 additions & 1 deletion

File tree

crates/pm/src/cli_entry.rs

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -313,7 +313,7 @@ async fn async_main() -> Result<()> {
313313
crate::initialize(InitializeOptions {
314314
registry: cli.registry,
315315
cache_dir: cli.cache_dir.map(Into::into),
316-
legacy_peer_deps: cli.legacy_peer_deps,
316+
legacy_peer_deps: legacy_peer_deps_override(cli.legacy_peer_deps),
317317
manifests_concurrency_limit: cli.manifests_concurrency_limit,
318318
script_concurrency_limit: cli.script_concurrency_limit,
319319
})
@@ -496,6 +496,14 @@ fn has_flag_before_delimiter(args: &[String], flag: &str) -> bool {
496496
.any(|arg| arg == flag)
497497
}
498498

499+
// `ArgAction::SetTrue` materializes an absent flag as `Some(false)`. The CLI
500+
// historically treated that as no override so the configured/default peer
501+
// policy remains in effect; embedders can still pass `Some(false)` directly to
502+
// `initialize` when they intentionally want to include peer dependencies.
503+
fn legacy_peer_deps_override(value: Option<bool>) -> Option<bool> {
504+
value.filter(|enabled| *enabled)
505+
}
506+
499507
fn detect_help_target(args: &[String]) -> Option<HelpTarget> {
500508
let command = detect_command(args)?;
501509
(command != "help" && command != "version").then(|| HelpTarget {
@@ -611,3 +619,24 @@ fn dependency_failure_details(error: &anyhow::Error) -> Option<ErrorDetails> {
611619
.collect(),
612620
})
613621
}
622+
623+
#[cfg(test)]
624+
mod tests {
625+
use clap::Parser;
626+
627+
use super::*;
628+
629+
#[test]
630+
fn absent_legacy_peer_flag_does_not_override_the_default() {
631+
let absent = Cli::try_parse_from(["utoo"]).expect("bare CLI should parse");
632+
assert_eq!(absent.legacy_peer_deps, Some(false));
633+
assert_eq!(legacy_peer_deps_override(absent.legacy_peer_deps), None);
634+
635+
let present = Cli::try_parse_from(["utoo", "--legacy-peer-deps"])
636+
.expect("legacy peer flag should parse");
637+
assert_eq!(
638+
legacy_peer_deps_override(present.legacy_peer_deps),
639+
Some(true)
640+
);
641+
}
642+
}

0 commit comments

Comments
 (0)