summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEd Page <eopage@gmail.com>2024-03-01 16:25:10 -0600
committerEd Page <eopage@gmail.com>2024-03-01 16:25:10 -0600
commit910f56bd57bb64733bd9e80f8c24ca4e97c786df (patch)
treee18137e0dfae78520703b4419af24f0363792a8b
parentd756ff8882be5f32c00ab142074bec5ea13c4d87 (diff)
refactor(add): Allow specializing the message for rustc
-rw-r--r--src/cargo/ops/cargo_add/mod.rs29
1 files changed, 22 insertions, 7 deletions
diff --git a/src/cargo/ops/cargo_add/mod.rs b/src/cargo/ops/cargo_add/mod.rs
index 38c356d93..fc57bff5b 100644
--- a/src/cargo/ops/cargo_add/mod.rs
+++ b/src/cargo/ops/cargo_add/mod.rs
@@ -616,10 +616,10 @@ fn get_latest_dependency(
})?;
if gctx.cli_unstable().msrv_policy && honor_rust_version {
- let req_msrv = spec
+ let (req_msrv, is_msrv) = spec
.rust_version()
.cloned()
- .map(CargoResult::Ok)
+ .map(|msrv| CargoResult::Ok((msrv.clone(), true)))
.unwrap_or_else(|| {
let rustc = gctx.load_global_rustc(None)?;
@@ -633,7 +633,7 @@ fn get_latest_dependency(
build: None,
})
.unwrap();
- Ok(untagged_version)
+ Ok((untagged_version, false))
})?;
let msrvs = possibilities
@@ -652,21 +652,36 @@ fn get_latest_dependency(
let latest_msrv = latest
.rust_version()
.expect("as `None` are compatible, we can't be here");
- anyhow::format_err!(
- "\
+ if is_msrv {
+ anyhow::format_err!(
+ "\
+no version of crate `{dep_name}` can maintain {name}'s rust-version of {req_msrv}
+help: pass `--ignore-rust-version` to select {dep_name}@{latest_version} which requires rustc {latest_msrv}"
+ )
+ } else {
+ anyhow::format_err!(
+ "\
no version of crate `{dep_name}` can maintain {name}'s rust-version of {req_msrv}
help: pass `--ignore-rust-version` to select {dep_name}@{latest_version} which requires rustc {latest_msrv}"
- )
+ )
+ }
})?;
if latest_msrv.version() < latest.version() {
let latest_version = latest.version();
let latest_rust_version = latest.rust_version().unwrap();
let name = spec.name();
- gctx.shell().warn(format_args!(
+ if is_msrv {
+ gctx.shell().warn(format_args!(
+ "\
+ignoring {dependency}@{latest_version} (which requires rustc {latest_rust_version}) to maintain {name}'s rust-version of {req_msrv}",
+ ))?;
+ } else {
+ gctx.shell().warn(format_args!(
"\
ignoring {dependency}@{latest_version} (which requires rustc {latest_rust_version}) to maintain {name}'s rust-version of {req_msrv}",
))?;
+ }
latest = latest_msrv;
}