Skip to content

Commit

Permalink
feat(add): Stabilize MSRV-aware version req selection
Browse files Browse the repository at this point in the history
This is part of rust-lang#9930 for rust-lang/rfcs#3537

This will make it easier to maintain an MSRV-compliant `Cargo.toml` but
leaves validation up to the user as the resolver will pick newer
versions.
This helps the MSRV-aware workflows enumerated in
rust-lang/rfcs#3537 though it could be confusing to the workflow with an
MSRV-compatible lockfile.
PR rust-lang#13561 at least raises awareness of that discrepancy.

There is an unresolved question on differences in the resolver vs
`cargo add` for dealing with an unset `rust-version`.
However, we are only stabilizing the `cargo add` side which is a very
light two-way door as this is a UX-focused command and not a
programmatic command.

This hasn't gotten much end-user testing but, as its UX focused, that
seems fine.

As such, this seems like it is ready to stabilize.
  • Loading branch information
epage committed Mar 20, 2024
1 parent 266a5ef commit 7805845
Show file tree
Hide file tree
Showing 8 changed files with 4 additions and 34 deletions.
10 changes: 1 addition & 9 deletions src/bin/cargo/commands/add.rs
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ Example uses:
- Depend on crates with the same name from different registries"),
flag(
"ignore-rust-version",
"Ignore `rust-version` specification in packages (unstable)"
"Ignore `rust-version` specification in packages"
),
])
.arg_manifest_path_without_unsupported_path_tip()
Expand Down Expand Up @@ -206,14 +206,6 @@ pub fn exec(gctx: &mut GlobalContext, args: &ArgMatches) -> CliResult {
let dependencies = parse_dependencies(gctx, args)?;

let ignore_rust_version = args.flag("ignore-rust-version");
if ignore_rust_version && !gctx.cli_unstable().msrv_policy {
return Err(CliError::new(
anyhow::format_err!(
"`--ignore-rust-version` is unstable; pass `-Zmsrv-policy` to enable support for it"
),
101,
));
}
let honor_rust_version = !ignore_rust_version;

let options = AddOptions {
Expand Down
2 changes: 1 addition & 1 deletion src/cargo/ops/cargo_add/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -615,7 +615,7 @@ fn get_latest_dependency(
)
})?;

if gctx.cli_unstable().msrv_policy && honor_rust_version {
if honor_rust_version {
let (req_msrv, is_msrv) = spec
.rust_version()
.cloned()
Expand Down
5 changes: 0 additions & 5 deletions src/doc/man/cargo-add.md
Original file line number Diff line number Diff line change
Expand Up @@ -141,11 +141,6 @@ which enables all specified features.

{{#option "`--ignore-rust-version`" }}
Ignore `rust-version` specification in packages.

This option is unstable and available only on the
[nightly channel](https://doc.rust-lang.org/book/appendix-07-nightly-rust.html)
and requires the `-Z unstable-options` flag to enable.
See <https://github.com/rust-lang/cargo/issues/5579> for more information.
{{/option}}

{{/options}}
Expand Down
6 changes: 0 additions & 6 deletions src/doc/man/generated_txt/cargo-add.txt
Original file line number Diff line number Diff line change
Expand Up @@ -131,12 +131,6 @@ OPTIONS
--ignore-rust-version
Ignore rust-version specification in packages.

This option is unstable and available only on the nightly channel
<https://doc.rust-lang.org/book/appendix-07-nightly-rust.html> and
requires the -Z unstable-options flag to enable. See
<https://github.com/rust-lang/cargo/issues/5579> for more
information.

Display Options
-v, --verbose
Use verbose output. May be specified twice for “very verbose”
Expand Down
6 changes: 1 addition & 5 deletions src/doc/src/commands/cargo-add.md
Original file line number Diff line number Diff line change
Expand Up @@ -137,11 +137,7 @@ which enables all specified features.</dd>


<dt class="option-term" id="option-cargo-add---ignore-rust-version"><a class="option-anchor" href="#option-cargo-add---ignore-rust-version"></a><code>--ignore-rust-version</code></dt>
<dd class="option-desc">Ignore <code>rust-version</code> specification in packages.</p>
<p>This option is unstable and available only on the
<a href="https://doc.rust-lang.org/book/appendix-07-nightly-rust.html">nightly channel</a>
and requires the <code>-Z unstable-options</code> flag to enable.
See <a href="https://github.com/rust-lang/cargo/issues/5579">https://github.com/rust-lang/cargo/issues/5579</a> for more information.</dd>
<dd class="option-desc">Ignore <code>rust-version</code> specification in packages.</dd>


</dl>
Expand Down
2 changes: 0 additions & 2 deletions src/doc/src/reference/unstable.md
Original file line number Diff line number Diff line change
Expand Up @@ -326,8 +326,6 @@ Documentation updates:

## msrv-policy
- [#9930](https://github.com/rust-lang/cargo/issues/9930) (MSRV-aware resolver)
- [#10653](https://github.com/rust-lang/cargo/issues/10653) (MSRV-aware cargo-add)
- [#10903](https://github.com/rust-lang/cargo/issues/10903) (MSRV-aware cargo-install)

The `msrv-policy` feature enables experiments in MSRV-aware policy for cargo in
preparation for an upcoming RFC.
Expand Down
5 changes: 0 additions & 5 deletions src/etc/man/cargo-add.1
Original file line number Diff line number Diff line change
Expand Up @@ -162,11 +162,6 @@ which enables all specified features.
\fB\-\-ignore\-rust\-version\fR
.RS 4
Ignore \fBrust\-version\fR specification in packages.
.sp
This option is unstable and available only on the
\fInightly channel\fR <https://doc.rust\-lang.org/book/appendix\-07\-nightly\-rust.html>
and requires the \fB\-Z unstable\-options\fR flag to enable.
See <https://github.com/rust\-lang/cargo/issues/5579> for more information.
.RE
.SS "Display Options"
.sp
Expand Down
2 changes: 1 addition & 1 deletion tests/testsuite/cargo_add/help/stdout.term.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 7805845

Please sign in to comment.