Skip to content

Commit 910f56b

Browse files
committed
refactor(add): Allow specializing the message for rustc
1 parent d756ff8 commit 910f56b

File tree

1 file changed

+22
-7
lines changed

1 file changed

+22
-7
lines changed

src/cargo/ops/cargo_add/mod.rs

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -616,10 +616,10 @@ fn get_latest_dependency(
616616
})?;
617617

618618
if gctx.cli_unstable().msrv_policy && honor_rust_version {
619-
let req_msrv = spec
619+
let (req_msrv, is_msrv) = spec
620620
.rust_version()
621621
.cloned()
622-
.map(CargoResult::Ok)
622+
.map(|msrv| CargoResult::Ok((msrv.clone(), true)))
623623
.unwrap_or_else(|| {
624624
let rustc = gctx.load_global_rustc(None)?;
625625

@@ -633,7 +633,7 @@ fn get_latest_dependency(
633633
build: None,
634634
})
635635
.unwrap();
636-
Ok(untagged_version)
636+
Ok((untagged_version, false))
637637
})?;
638638

639639
let msrvs = possibilities
@@ -652,21 +652,36 @@ fn get_latest_dependency(
652652
let latest_msrv = latest
653653
.rust_version()
654654
.expect("as `None` are compatible, we can't be here");
655-
anyhow::format_err!(
656-
"\
655+
if is_msrv {
656+
anyhow::format_err!(
657+
"\
658+
no version of crate `{dep_name}` can maintain {name}'s rust-version of {req_msrv}
659+
help: pass `--ignore-rust-version` to select {dep_name}@{latest_version} which requires rustc {latest_msrv}"
660+
)
661+
} else {
662+
anyhow::format_err!(
663+
"\
657664
no version of crate `{dep_name}` can maintain {name}'s rust-version of {req_msrv}
658665
help: pass `--ignore-rust-version` to select {dep_name}@{latest_version} which requires rustc {latest_msrv}"
659-
)
666+
)
667+
}
660668
})?;
661669

662670
if latest_msrv.version() < latest.version() {
663671
let latest_version = latest.version();
664672
let latest_rust_version = latest.rust_version().unwrap();
665673
let name = spec.name();
666-
gctx.shell().warn(format_args!(
674+
if is_msrv {
675+
gctx.shell().warn(format_args!(
676+
"\
677+
ignoring {dependency}@{latest_version} (which requires rustc {latest_rust_version}) to maintain {name}'s rust-version of {req_msrv}",
678+
))?;
679+
} else {
680+
gctx.shell().warn(format_args!(
667681
"\
668682
ignoring {dependency}@{latest_version} (which requires rustc {latest_rust_version}) to maintain {name}'s rust-version of {req_msrv}",
669683
))?;
684+
}
670685

671686
latest = latest_msrv;
672687
}

0 commit comments

Comments
 (0)