diff --git a/.ignore b/.ignore index e51dabef3e8..716739c37d6 100644 --- a/.ignore +++ b/.ignore @@ -13,6 +13,7 @@ src/etc/man !src/doc/src/commands/manifest-commands.md !src/doc/src/commands/package-commands.md !src/doc/src/commands/publishing-commands.md +!src/doc/src/commands/report-commands.md # Snapshots of HTML reports and log files are just too large tests/testsuite/**/*.jsonl diff --git a/src/bin/cargo/commands/help.rs b/src/bin/cargo/commands/help.rs index 913dabb1424..9da850c2ee0 100644 --- a/src/bin/cargo/commands/help.rs +++ b/src/bin/cargo/commands/help.rs @@ -1,9 +1,12 @@ use crate::aliased_command; use crate::command_prelude::*; + use cargo::drop_println; use cargo::util::errors::CargoResult; use cargo_util::paths::resolve_executable; use flate2::read::GzDecoder; + +use std::collections::HashMap; use std::ffi::OsStr; use std::ffi::OsString; use std::io::Read; @@ -15,82 +18,101 @@ const COMPRESSED_MAN: &[u8] = include_bytes!(concat!(env!("OUT_DIR"), "/man.tgz" pub fn cli() -> Command { subcommand("help") .about("Displays help for a cargo command") - .arg(Arg::new("COMMAND").action(ArgAction::Set).add( - clap_complete::ArgValueCandidates::new(|| { - super::builtin() - .iter() - .map(|cmd| { - let name = cmd.get_name(); - clap_complete::CompletionCandidate::new(name) - .help(cmd.get_about().cloned()) - .hide(cmd.is_hide_set()) - }) - .collect() - }), - )) + .arg( + Arg::new("COMMAND") + .num_args(1..) + .action(ArgAction::Append) + .add(clap_complete::ArgValueCandidates::new( + get_completion_candidates, + )), + ) } pub fn exec(gctx: &mut GlobalContext, args: &ArgMatches) -> CliResult { - let subcommand = args.get_one::("COMMAND"); - if let Some(subcommand) = subcommand { - if !try_help(gctx, subcommand)? { - match check_builtin(&subcommand) { - Some(s) => { - crate::execute_internal_subcommand( - gctx, - &[OsStr::new(s), OsStr::new("--help")], - )?; - } - None => { - crate::execute_external_subcommand( - gctx, - subcommand, - &[OsStr::new(subcommand), OsStr::new("--help")], - )?; - } - } - } - } else { - let mut cmd = crate::cli::cli(gctx); - let _ = cmd.print_help(); + let args_command = args + .get_many::("COMMAND") + .map(|vals| vals.map(String::as_str).collect::>()) + .unwrap_or_default(); + + if args_command.is_empty() { + let _ = crate::cli::cli(gctx).print_help(); + return Ok(()); } - Ok(()) -} -fn try_help(gctx: &GlobalContext, subcommand: &str) -> CargoResult { - let subcommand = match check_alias(gctx, subcommand) { - // If this alias is more than a simple subcommand pass-through, show the alias. - Some(argv) if argv.len() > 1 => { - let alias = argv.join(" "); - drop_println!(gctx, "`{}` is aliased to `{}`", subcommand, alias); - return Ok(true); + let subcommand = if args_command.len() == 1 { + // Expand alias first + let subcommand = args_command.first().unwrap(); + match aliased_command(gctx, subcommand).ok().flatten() { + Some(argv) if argv.len() > 1 => { + // If this alias is more than a simple subcommand pass-through, show the alias. + let alias = argv.join(" "); + drop_println!(gctx, "`{}` is aliased to `{}`", subcommand, alias); + return Ok(()); + } + // Otherwise, resolve the alias into its subcommand. + Some(argv) => { + // An alias with an empty argv can be created via `"empty-alias" = ""`. + let first = argv.get(0).map(String::as_str).unwrap_or(subcommand); + first.to_string() + } + None => subcommand.to_string(), } - // Otherwise, resolve the alias into its subcommand. - Some(argv) => { - // An alias with an empty argv can be created via `"empty-alias" = ""`. - let first = argv.get(0).map(String::as_str).unwrap_or(subcommand); - first.to_string() + } else { + if !is_valid_builtin_command_path(&args_command) { + let command_str = args_command.join(" "); + let err = anyhow::format_err!( + "no such command: `{command_str}`\n\n\ + help: view all installed commands with `cargo --list`", + ); + return Err(err.into()); } - None => subcommand.to_string(), + + args_command.join("-") }; - let subcommand = match check_builtin(&subcommand) { - Some(s) => s, - None => return Ok(false), + let builtins = all_builtin_commands(); + let Some(lookup) = builtins.get(&subcommand).cloned() else { + // If not built-in, try giving `--help` to external command. + crate::execute_external_subcommand( + gctx, + &subcommand, + &[OsStr::new(&subcommand), OsStr::new("--help")], + )?; + + return Ok(()); + }; + + let subcommand = match lookup { + ManPageLookup::Direct => subcommand, + ManPageLookup::RedirectTo(primary) => primary, }; - if resolve_executable(Path::new("man")).is_ok() { - let man = match extract_man(subcommand, "1") { - Some(man) => man, - None => return Ok(false), + if try_help(&subcommand)? { + return Ok(()); + } + + crate::execute_internal_subcommand(gctx, &[OsStr::new(&subcommand), OsStr::new("--help")])?; + + Ok(()) +} + +fn try_help(subcommand: &str) -> CargoResult { + // ALLOWED: For testing cargo itself only. + #[allow(clippy::disallowed_methods)] + let force_help_text = std::env::var("__CARGO_TEST_FORCE_HELP_TXT").is_ok(); + + if resolve_executable(Path::new("man")).is_ok() && !force_help_text { + let Some(man) = extract_man(subcommand, "1") else { + return Ok(false); }; write_and_spawn(subcommand, &man, "man")?; } else { - let txt = match extract_man(subcommand, "txt") { - Some(txt) => txt, - None => return Ok(false), + let Some(txt) = extract_man(subcommand, "txt") else { + return Ok(false); }; - if resolve_executable(Path::new("less")).is_ok() { + if force_help_text { + drop(std::io::stdout().write_all(&txt)); + } else if resolve_executable(Path::new("less")).is_ok() { write_and_spawn(subcommand, &txt, "less")?; } else if resolve_executable(Path::new("more")).is_ok() { write_and_spawn(subcommand, &txt, "more")?; @@ -101,20 +123,6 @@ fn try_help(gctx: &GlobalContext, subcommand: &str) -> CargoResult { Ok(true) } -/// Checks if the given subcommand is an alias. -/// -/// Returns None if it is not an alias. -fn check_alias(gctx: &GlobalContext, subcommand: &str) -> Option> { - aliased_command(gctx, subcommand).ok().flatten() -} - -/// Checks if the given subcommand is a built-in command (not via an alias). -/// -/// Returns None if it is not a built-in command. -fn check_builtin(subcommand: &str) -> Option<&str> { - super::builtin_exec(subcommand).map(|_| subcommand) -} - /// Extracts the given man page from the compressed archive. /// /// Returns None if the command wasn't found. @@ -157,3 +165,101 @@ fn write_and_spawn(name: &str, contents: &[u8], command: &str) -> CargoResult<() drop(cmd.wait()); Ok(()) } + +#[derive(Clone)] +enum ManPageLookup { + /// For primary command name, use it directly for man page lookup + Direct, + /// For alias, redirect to the primary command name for man page lookup + RedirectTo(String), +} + +/// Validates that multi-arg paths represent actual nested commands +fn is_valid_builtin_command_path(parts: &[&str]) -> bool { + let Some((first, remainings)) = parts.split_first() else { + return false; + }; + + let builtins = super::builtin(); + + let Some(mut current) = builtins.iter().find(|cmd| cmd.get_name() == *first) else { + return false; + }; + + for &part in remainings { + let next = current + .get_subcommands() + .find(|cmd| cmd.get_name() == part || cmd.get_all_aliases().any(|a| a == part)); + let Some(next) = next else { + return false; + }; + current = next; + } + + true +} + +/// Builds a map of all command names (including nested and aliases) to their man page lookup. +fn all_builtin_commands() -> HashMap { + fn walk(cmd: Command, prefix: Option<&String>, map: &mut HashMap) { + let name = cmd.get_name(); + let key = match prefix { + Some(prefix) => format!("{prefix}-{name}"), + None => name.to_string(), + }; + + for cmd in cmd.get_subcommands() { + walk(cmd.clone(), Some(&key), map); + } + + for alias in cmd.get_all_aliases() { + let alias_key = match prefix { + Some(prefix) => format!("{prefix}-{alias}"), + None => alias.to_string(), + }; + // Register aliases as redirects to the primary command + map.insert(alias_key, ManPageLookup::RedirectTo(key.clone())); + } + + // Register the primary command name + map.insert(key, ManPageLookup::Direct); + } + + let mut map = HashMap::new(); + for cmd in super::builtin() { + walk(cmd, None, &mut map); + } + + map +} + +/// Returns dash-joined names for nested commands, +/// so they can be completed as single tokens. +fn get_completion_candidates() -> Vec { + fn walk( + cmd: Command, + prefix: Option<&String>, + candidates: &mut Vec, + ) { + let name = cmd.get_name(); + let key = match prefix { + Some(prefix) => format!("{prefix}-{name}"), + None => name.to_string(), + }; + + for cmd in cmd.get_subcommands() { + walk(cmd.clone(), Some(&key), candidates); + } + + let candidate = clap_complete::CompletionCandidate::new(&key) + .help(cmd.get_about().cloned()) + .hide(cmd.is_hide_set()); + candidates.push(candidate); + } + + let mut candidates = Vec::new(); + for cmd in super::builtin() { + walk(cmd, None, &mut candidates); + } + candidates +} diff --git a/src/bin/cargo/commands/report.rs b/src/bin/cargo/commands/report.rs index e31edb19133..9cc2b6678f2 100644 --- a/src/bin/cargo/commands/report.rs +++ b/src/bin/cargo/commands/report.rs @@ -25,7 +25,10 @@ pub fn cli() -> Command { ) .value_name("id"), ) - .arg_package("Package to display a report for"), + .arg_package("Package to display a report for") + .after_help(color_print::cstr!( + "Run `cargo help report future-incompatibilities` for more detailed information.\n" + )), ) .subcommand( subcommand("timings") diff --git a/src/doc/man/cargo-help.md b/src/doc/man/cargo-help.md index 4a5a8f51575..9d9304d5871 100644 --- a/src/doc/man/cargo-help.md +++ b/src/doc/man/cargo-help.md @@ -12,13 +12,52 @@ cargo-help --- Get help for a Cargo command Prints a help message for the given command. +For nested commands (commands with subcommands), separate the command levels +with spaces. For example, `cargo help report future-incompatibilities` displays +help for the `cargo report future-incompatibilities` command. + +The dash-joined form (`cargo help report-future-incompatibilities`) also works +for compatibility. + +Note that spaces only separate hierarchy levels between a parent command and its +subcommands. Dashes that are part of a command's name (like `generate-lockfile`) +must always be preserved. + +## OPTIONS + +### Display Options + +{{#options}} +{{> options-display }} +{{/options}} + +### Manifest Options + +{{#options}} +{{> options-locked }} +{{/options}} + +{{> section-options-common }} + +{{> section-environment }} + +{{> section-exit-status }} + ## EXAMPLES 1. Get help for a command: cargo help build -2. Help is also available with the `--help` flag: +2. Get help for a nested command: + + cargo help report future-incompatibilities + +3. The dash-joined form also works: + + cargo help report-future-incompatibilities + +4. Help is also available with the `--help` flag: cargo build --help diff --git a/src/doc/man/cargo-remove.md b/src/doc/man/cargo-remove.md index 87bacb5b491..9cddfa2f513 100644 --- a/src/doc/man/cargo-remove.md +++ b/src/doc/man/cargo-remove.md @@ -89,9 +89,9 @@ Package to remove from. cargo remove --dev trybuild -3. Remove `nom` from the `x86_64-pc-windows-gnu` dependencies table +3. Remove `nom` from the `wasm32-unknown-unknown` dependencies table - cargo remove --target x86_64-pc-windows-gnu nom + cargo remove --target wasm32-unknown-unknown nom ## SEE ALSO {{man "cargo" 1}}, {{man "cargo-add" 1}} diff --git a/src/doc/man/cargo-report-future-incompatibilities.md b/src/doc/man/cargo-report-future-incompatibilities.md new file mode 100644 index 00000000000..3b1cd762146 --- /dev/null +++ b/src/doc/man/cargo-report-future-incompatibilities.md @@ -0,0 +1,64 @@ +# cargo-report-future-incompatibilities(1) +{{~*set actionverb="Display a report for"}} + +## NAME + +cargo-report-future-incompatibilities --- Reports any crates which will eventually stop compiling + +## SYNOPSIS + +`cargo report future-incompatibilities` [_options_] + +## DESCRIPTION + +Displays a report of future-incompatible warnings that were emitted during +previous builds. +These are warnings for changes that may become hard errors in the future, +causing dependencies to stop building in a future version of rustc. + +For more, see the chapter on [Future incompat report](../reference/future-incompat-report.html). + +## OPTIONS + +{{#options}} + +{{#option "`--id` _id_" }} +Show the report with the specified Cargo-generated id. +If not specified, shows the most recent report. +{{/option}} + +{{/options}} + +{{> section-options-package }} + +### Display Options + +{{#options}} +{{> options-display }} +{{/options}} + +### Manifest Options + +{{#options}} +{{> options-locked }} +{{/options}} + +{{> section-options-common }} + +{{> section-environment }} + +{{> section-exit-status }} + +## EXAMPLES + +1. Display the latest future-incompat report: + + cargo report future-incompat + +2. Display the latest future-incompat report for a specific package: + + cargo report future-incompat --package my-dep@0.0.1 + +## SEE ALSO + +{{man "cargo" 1}}, {{man "cargo-report" 1}}, {{man "cargo-build" 1}} diff --git a/src/doc/man/cargo-report.md b/src/doc/man/cargo-report.md index ba33617dbb0..fb3af85570c 100644 --- a/src/doc/man/cargo-report.md +++ b/src/doc/man/cargo-report.md @@ -8,35 +8,36 @@ cargo-report --- Generate and display various kinds of reports `cargo report` _type_ [_options_] -### DESCRIPTION +## DESCRIPTION Displays a report of the given _type_ --- currently, only `future-incompat` is supported ## OPTIONS -{{#options}} +### Display Options -{{#option "`--id` _id_" }} -Show the report with the specified Cargo-generated id -{{/option}} +{{#options}} +{{> options-display }} +{{/options}} -{{#option "`-p` _spec_..." "`--package` _spec_..." }} -Only display a report for the specified package -{{/option}} +### Manifest Options +{{#options}} +{{> options-locked }} {{/options}} -## EXAMPLES +{{> section-options-common }} + +{{> section-environment }} -1. Display the latest future-incompat report: +{{> section-exit-status }} - cargo report future-incompat +## EXAMPLES -2. Display the latest future-incompat report for a specific package: +1. Display the available kinds of reports: - cargo report future-incompat --package my-dep:0.0.1 + cargo report --help ## SEE ALSO -[Future incompat report](../reference/future-incompat-report.html) -{{man "cargo" 1}} +{{man "cargo" 1}}, {{man "cargo-report-future-incompatibilities" 1}} diff --git a/src/doc/man/cargo.md b/src/doc/man/cargo.md index 21bfe620aee..271fd058d8a 100644 --- a/src/doc/man/cargo.md +++ b/src/doc/man/cargo.md @@ -123,6 +123,14 @@ available at . {{man "cargo-yank" 1}}\     Remove a pushed crate from the index. +### Report Commands + +{{man "cargo-report" 1}}\ +    Generate and display various kinds of reports. + +{{man "cargo-report-future-incompatibilities" 1}}\ +    Reports any crates which will eventually stop compiling. + ### General Commands {{man "cargo-help" 1}}\ diff --git a/src/doc/man/generated_txt/cargo-help.txt b/src/doc/man/generated_txt/cargo-help.txt index 0107ebe2c04..d5510599aaf 100644 --- a/src/doc/man/generated_txt/cargo-help.txt +++ b/src/doc/man/generated_txt/cargo-help.txt @@ -9,12 +9,138 @@ SYNOPSIS DESCRIPTION Prints a help message for the given command. + For nested commands (commands with subcommands), separate the command + levels with spaces. For example, cargo help report + future-incompatibilities displays help for the cargo report + future-incompatibilities command. + + The dash-joined form (cargo help report-future-incompatibilities) also + works for compatibility. + + Note that spaces only separate hierarchy levels between a parent command + and its subcommands. Dashes that are part of a command’s name (like + generate-lockfile) must always be preserved. + +OPTIONS + Display Options + -v, --verbose + Use verbose output. May be specified twice for “very verbose” + output which includes extra output such as dependency warnings and + build script output. May also be specified with the term.verbose + config value + . + + -q, --quiet + Do not print cargo log messages. May also be specified with the + term.quiet config value + . + + --color when + Control when colored output is used. Valid values: + + o auto (default): Automatically detect if color support is + available on the terminal. + + o always: Always display colors. + + o never: Never display colors. + + May also be specified with the term.color config value + . + + Manifest Options + --locked + Asserts that the exact same dependencies and versions are used as + when the existing Cargo.lock file was originally generated. Cargo + will exit with an error when either of the following scenarios + arises: + + o The lock file is missing. + + o Cargo attempted to change the lock file due to a different + dependency resolution. + + It may be used in environments where deterministic builds are + desired, such as in CI pipelines. + + --offline + Prevents Cargo from accessing the network for any reason. Without + this flag, Cargo will stop with an error if it needs to access the + network and the network is not available. With this flag, Cargo will + attempt to proceed without the network if possible. + + Beware that this may result in different dependency resolution than + online mode. Cargo will restrict itself to crates that are + downloaded locally, even if there might be a newer version as + indicated in the local copy of the index. See the cargo-fetch(1) + command to download dependencies before going offline. + + May also be specified with the net.offline config value + . + + --frozen + Equivalent to specifying both --locked and --offline. + + Common Options + +toolchain + If Cargo has been installed with rustup, and the first argument to + cargo begins with +, it will be interpreted as a rustup toolchain + name (such as +stable or +nightly). See the rustup documentation + for more + information about how toolchain overrides work. + + --config KEY=VALUE or PATH + Overrides a Cargo configuration value. The argument should be in + TOML syntax of KEY=VALUE, or provided as a path to an extra + configuration file. This flag may be specified multiple times. See + the command-line overrides section + + for more information. + + -C PATH + Changes the current working directory before executing any specified + operations. This affects things like where cargo looks by default + for the project manifest (Cargo.toml), as well as the directories + searched for discovering .cargo/config.toml, for example. This + option must appear before the command name, for example cargo -C + path/to/my-project build. + + This option is only available on the nightly channel + and + requires the -Z unstable-options flag to enable (see #10098 + ). + + -h, --help + Prints help information. + + -Z flag + Unstable (nightly-only) flags to Cargo. Run cargo -Z help for + details. + +ENVIRONMENT + See the reference + + for details on environment variables that Cargo reads. + +EXIT STATUS + o 0: Cargo succeeded. + + o 101: Cargo failed to complete. + EXAMPLES 1. Get help for a command: cargo help build - 2. Help is also available with the --help flag: + 2. Get help for a nested command: + + cargo help report future-incompatibilities + + 3. The dash-joined form also works: + + cargo help report-future-incompatibilities + + 4. Help is also available with the --help flag: cargo build --help diff --git a/src/doc/man/generated_txt/cargo-remove.txt b/src/doc/man/generated_txt/cargo-remove.txt index 4f5c4a3d394..bb4cf128d7b 100644 --- a/src/doc/man/generated_txt/cargo-remove.txt +++ b/src/doc/man/generated_txt/cargo-remove.txt @@ -167,9 +167,9 @@ EXAMPLES cargo remove --dev trybuild - 3. Remove nom from the x86_64-pc-windows-gnu dependencies table + 3. Remove nom from the wasm32-unknown-unknown dependencies table - cargo remove --target x86_64-pc-windows-gnu nom + cargo remove --target wasm32-unknown-unknown nom SEE ALSO cargo(1), cargo-add(1) diff --git a/src/doc/man/generated_txt/cargo-report-future-incompatibilities.txt b/src/doc/man/generated_txt/cargo-report-future-incompatibilities.txt new file mode 100644 index 00000000000..6caa69b8030 --- /dev/null +++ b/src/doc/man/generated_txt/cargo-report-future-incompatibilities.txt @@ -0,0 +1,148 @@ +CARGO-REPORT-FUTURE-INCOMPATIBILITIES(1) + +NAME + cargo-report-future-incompatibilities — Reports any crates which will + eventually stop compiling + +SYNOPSIS + cargo report future-incompatibilities [options] + +DESCRIPTION + Displays a report of future-incompatible warnings that were emitted + during previous builds. These are warnings for changes that may become + hard errors in the future, causing dependencies to stop building in a + future version of rustc. + + For more, see the chapter on Future incompat report + . + +OPTIONS + --id id + Show the report with the specified Cargo-generated id. If not + specified, shows the most recent report. + + Package Selection + By default, the package in the current working directory is selected. + The -p flag can be used to choose a different package in a workspace. + + -p spec, --package spec + The package to display a report for. See cargo-pkgid(1) for the SPEC + format. + + Display Options + -v, --verbose + Use verbose output. May be specified twice for “very verbose” + output which includes extra output such as dependency warnings and + build script output. May also be specified with the term.verbose + config value + . + + -q, --quiet + Do not print cargo log messages. May also be specified with the + term.quiet config value + . + + --color when + Control when colored output is used. Valid values: + + o auto (default): Automatically detect if color support is + available on the terminal. + + o always: Always display colors. + + o never: Never display colors. + + May also be specified with the term.color config value + . + + Manifest Options + --locked + Asserts that the exact same dependencies and versions are used as + when the existing Cargo.lock file was originally generated. Cargo + will exit with an error when either of the following scenarios + arises: + + o The lock file is missing. + + o Cargo attempted to change the lock file due to a different + dependency resolution. + + It may be used in environments where deterministic builds are + desired, such as in CI pipelines. + + --offline + Prevents Cargo from accessing the network for any reason. Without + this flag, Cargo will stop with an error if it needs to access the + network and the network is not available. With this flag, Cargo will + attempt to proceed without the network if possible. + + Beware that this may result in different dependency resolution than + online mode. Cargo will restrict itself to crates that are + downloaded locally, even if there might be a newer version as + indicated in the local copy of the index. See the cargo-fetch(1) + command to download dependencies before going offline. + + May also be specified with the net.offline config value + . + + --frozen + Equivalent to specifying both --locked and --offline. + + Common Options + +toolchain + If Cargo has been installed with rustup, and the first argument to + cargo begins with +, it will be interpreted as a rustup toolchain + name (such as +stable or +nightly). See the rustup documentation + for more + information about how toolchain overrides work. + + --config KEY=VALUE or PATH + Overrides a Cargo configuration value. The argument should be in + TOML syntax of KEY=VALUE, or provided as a path to an extra + configuration file. This flag may be specified multiple times. See + the command-line overrides section + + for more information. + + -C PATH + Changes the current working directory before executing any specified + operations. This affects things like where cargo looks by default + for the project manifest (Cargo.toml), as well as the directories + searched for discovering .cargo/config.toml, for example. This + option must appear before the command name, for example cargo -C + path/to/my-project build. + + This option is only available on the nightly channel + and + requires the -Z unstable-options flag to enable (see #10098 + ). + + -h, --help + Prints help information. + + -Z flag + Unstable (nightly-only) flags to Cargo. Run cargo -Z help for + details. + +ENVIRONMENT + See the reference + + for details on environment variables that Cargo reads. + +EXIT STATUS + o 0: Cargo succeeded. + + o 101: Cargo failed to complete. + +EXAMPLES + 1. Display the latest future-incompat report: + + cargo report future-incompat + + 2. Display the latest future-incompat report for a specific package: + + cargo report future-incompat --package my-dep@0.0.1 + +SEE ALSO + cargo(1), cargo-report(1), cargo-build(1) + diff --git a/src/doc/man/generated_txt/cargo-report.txt b/src/doc/man/generated_txt/cargo-report.txt index f75a60c50e1..81eec46577f 100644 --- a/src/doc/man/generated_txt/cargo-report.txt +++ b/src/doc/man/generated_txt/cargo-report.txt @@ -6,29 +6,121 @@ NAME SYNOPSIS cargo report type [options] - DESCRIPTION +DESCRIPTION Displays a report of the given type — currently, only future-incompat is supported OPTIONS - --id id - Show the report with the specified Cargo-generated id + Display Options + -v, --verbose + Use verbose output. May be specified twice for “very verbose” + output which includes extra output such as dependency warnings and + build script output. May also be specified with the term.verbose + config value + . - -p spec…, --package spec… - Only display a report for the specified package + -q, --quiet + Do not print cargo log messages. May also be specified with the + term.quiet config value + . -EXAMPLES - 1. Display the latest future-incompat report: + --color when + Control when colored output is used. Valid values: - cargo report future-incompat + o auto (default): Automatically detect if color support is + available on the terminal. - 2. Display the latest future-incompat report for a specific package: + o always: Always display colors. - cargo report future-incompat --package my-dep:0.0.1 + o never: Never display colors. -SEE ALSO - Future incompat report - + May also be specified with the term.color config value + . + + Manifest Options + --locked + Asserts that the exact same dependencies and versions are used as + when the existing Cargo.lock file was originally generated. Cargo + will exit with an error when either of the following scenarios + arises: + + o The lock file is missing. + + o Cargo attempted to change the lock file due to a different + dependency resolution. + + It may be used in environments where deterministic builds are + desired, such as in CI pipelines. + + --offline + Prevents Cargo from accessing the network for any reason. Without + this flag, Cargo will stop with an error if it needs to access the + network and the network is not available. With this flag, Cargo will + attempt to proceed without the network if possible. + + Beware that this may result in different dependency resolution than + online mode. Cargo will restrict itself to crates that are + downloaded locally, even if there might be a newer version as + indicated in the local copy of the index. See the cargo-fetch(1) + command to download dependencies before going offline. + + May also be specified with the net.offline config value + . + + --frozen + Equivalent to specifying both --locked and --offline. + + Common Options + +toolchain + If Cargo has been installed with rustup, and the first argument to + cargo begins with +, it will be interpreted as a rustup toolchain + name (such as +stable or +nightly). See the rustup documentation + for more + information about how toolchain overrides work. + + --config KEY=VALUE or PATH + Overrides a Cargo configuration value. The argument should be in + TOML syntax of KEY=VALUE, or provided as a path to an extra + configuration file. This flag may be specified multiple times. See + the command-line overrides section + + for more information. - cargo(1) + -C PATH + Changes the current working directory before executing any specified + operations. This affects things like where cargo looks by default + for the project manifest (Cargo.toml), as well as the directories + searched for discovering .cargo/config.toml, for example. This + option must appear before the command name, for example cargo -C + path/to/my-project build. + + This option is only available on the nightly channel + and + requires the -Z unstable-options flag to enable (see #10098 + ). + + -h, --help + Prints help information. + + -Z flag + Unstable (nightly-only) flags to Cargo. Run cargo -Z help for + details. + +ENVIRONMENT + See the reference + + for details on environment variables that Cargo reads. + +EXIT STATUS + o 0: Cargo succeeded. + + o 101: Cargo failed to complete. + +EXAMPLES + 1. Display the available kinds of reports: + + cargo report --help + +SEE ALSO + cargo(1), cargo-report-future-incompatibilities(1) diff --git a/src/doc/man/generated_txt/cargo.txt b/src/doc/man/generated_txt/cargo.txt index b2e359fa5f1..7ab37a5a2fa 100644 --- a/src/doc/man/generated_txt/cargo.txt +++ b/src/doc/man/generated_txt/cargo.txt @@ -117,6 +117,13 @@ COMMANDS cargo-yank(1)     Remove a pushed crate from the index. + Report Commands + cargo-report(1) +     Generate and display various kinds of reports. + + cargo-report-future-incompatibilities(1) +     Reports any crates which will eventually stop compiling. + General Commands cargo-help(1)     Display help information about Cargo. diff --git a/src/doc/src/SUMMARY.md b/src/doc/src/SUMMARY.md index 40f6d4a5ed3..011c20492a8 100644 --- a/src/doc/src/SUMMARY.md +++ b/src/doc/src/SUMMARY.md @@ -66,7 +66,6 @@ * [cargo fix](commands/cargo-fix.md) * [cargo fmt](commands/cargo-fmt.md) * [cargo miri](commands/cargo-miri.md) - * [cargo report](commands/cargo-report.md) * [cargo run](commands/cargo-run.md) * [cargo rustc](commands/cargo-rustc.md) * [cargo rustdoc](commands/cargo-rustdoc.md) @@ -95,6 +94,9 @@ * [cargo package](commands/cargo-package.md) * [cargo publish](commands/cargo-publish.md) * [cargo yank](commands/cargo-yank.md) + * [Report Commands](commands/report-commands.md) + * [cargo report](commands/cargo-report.md) + * [cargo report future-incompatibilities](commands/cargo-report-future-incompatibilities.md) * [Deprecated and Removed](commands/deprecated-and-removed.md) * [FAQ](faq.md) diff --git a/src/doc/src/commands/build-commands.md b/src/doc/src/commands/build-commands.md index f49f1916d79..2e86635c592 100644 --- a/src/doc/src/commands/build-commands.md +++ b/src/doc/src/commands/build-commands.md @@ -9,7 +9,6 @@ * [cargo fix](cargo-fix.md) * [cargo fmt](cargo-fmt.md) * [cargo miri](cargo-miri.md) -* [cargo report](cargo-report.md) * [cargo run](cargo-run.md) * [cargo rustc](cargo-rustc.md) * [cargo rustdoc](cargo-rustdoc.md) diff --git a/src/doc/src/commands/cargo-help.md b/src/doc/src/commands/cargo-help.md index db5cb342abf..de77ae84341 100644 --- a/src/doc/src/commands/cargo-help.md +++ b/src/doc/src/commands/cargo-help.md @@ -12,13 +12,159 @@ cargo-help --- Get help for a Cargo command Prints a help message for the given command. +For nested commands (commands with subcommands), separate the command levels +with spaces. For example, `cargo help report future-incompatibilities` displays +help for the `cargo report future-incompatibilities` command. + +The dash-joined form (`cargo help report-future-incompatibilities`) also works +for compatibility. + +Note that spaces only separate hierarchy levels between a parent command and its +subcommands. Dashes that are part of a command's name (like `generate-lockfile`) +must always be preserved. + +## OPTIONS + +### Display Options + +
+
-v
+
--verbose
+

Use verbose output. May be specified twice for “very verbose” output which +includes extra output such as dependency warnings and build script output. +May also be specified with the term.verbose +config value.

+
+ + +
-q
+
--quiet
+

Do not print cargo log messages. +May also be specified with the term.quiet +config value.

+
+ + +
--color when
+

Control when colored output is used. Valid values:

+
    +
  • auto (default): Automatically detect if color support is available on the +terminal.
  • +
  • always: Always display colors.
  • +
  • never: Never display colors.
  • +
+

May also be specified with the term.color +config value.

+
+ +
+ +### Manifest Options + +
+
--locked
+

Asserts that the exact same dependencies and versions are used as when the +existing Cargo.lock file was originally generated. Cargo will exit with an +error when either of the following scenarios arises:

+
    +
  • The lock file is missing.
  • +
  • Cargo attempted to change the lock file due to a different dependency resolution.
  • +
+

It may be used in environments where deterministic builds are desired, +such as in CI pipelines.

+
+ + +
--offline
+

Prevents Cargo from accessing the network for any reason. Without this +flag, Cargo will stop with an error if it needs to access the network and +the network is not available. With this flag, Cargo will attempt to +proceed without the network if possible.

+

Beware that this may result in different dependency resolution than online +mode. Cargo will restrict itself to crates that are downloaded locally, even +if there might be a newer version as indicated in the local copy of the index. +See the cargo-fetch(1) command to download dependencies before going +offline.

+

May also be specified with the net.offline config value.

+
+ + +
--frozen
+

Equivalent to specifying both --locked and --offline.

+
+ +
+ +### Common Options + +
+ +
+toolchain
+

If Cargo has been installed with rustup, and the first argument to cargo +begins with +, it will be interpreted as a rustup toolchain name (such +as +stable or +nightly). +See the rustup documentation +for more information about how toolchain overrides work.

+
+ + +
--config KEY=VALUE or PATH
+

Overrides a Cargo configuration value. The argument should be in TOML syntax of KEY=VALUE, +or provided as a path to an extra configuration file. This flag may be specified multiple times. +See the command-line overrides section for more information.

+
+ + +
-C PATH
+

Changes the current working directory before executing any specified operations. This affects +things like where cargo looks by default for the project manifest (Cargo.toml), as well as +the directories searched for discovering .cargo/config.toml, for example. This option must +appear before the command name, for example cargo -C path/to/my-project build.

+

This option is only available on the nightly +channel and +requires the -Z unstable-options flag to enable (see +#10098).

+
+ + +
-h
+
--help
+

Prints help information.

+
+ + +
-Z flag
+

Unstable (nightly-only) flags to Cargo. Run cargo -Z help for details.

+
+ + +
+ +## ENVIRONMENT + +See [the reference](../reference/environment-variables.html) for +details on environment variables that Cargo reads. + +## EXIT STATUS + +* `0`: Cargo succeeded. +* `101`: Cargo failed to complete. + ## EXAMPLES 1. Get help for a command: cargo help build -2. Help is also available with the `--help` flag: +2. Get help for a nested command: + + cargo help report future-incompatibilities + +3. The dash-joined form also works: + + cargo help report-future-incompatibilities + +4. Help is also available with the `--help` flag: cargo build --help diff --git a/src/doc/src/commands/cargo-remove.md b/src/doc/src/commands/cargo-remove.md index 6634e287266..d41fd097d3c 100644 --- a/src/doc/src/commands/cargo-remove.md +++ b/src/doc/src/commands/cargo-remove.md @@ -212,9 +212,9 @@ details on environment variables that Cargo reads. cargo remove --dev trybuild -3. Remove `nom` from the `x86_64-pc-windows-gnu` dependencies table +3. Remove `nom` from the `wasm32-unknown-unknown` dependencies table - cargo remove --target x86_64-pc-windows-gnu nom + cargo remove --target wasm32-unknown-unknown nom ## SEE ALSO [cargo(1)](cargo.html), [cargo-add(1)](cargo-add.html) diff --git a/src/doc/src/commands/cargo-report-future-incompatibilities.md b/src/doc/src/commands/cargo-report-future-incompatibilities.md new file mode 100644 index 00000000000..c055d5c40e3 --- /dev/null +++ b/src/doc/src/commands/cargo-report-future-incompatibilities.md @@ -0,0 +1,184 @@ +# cargo-report-future-incompatibilities(1) +## NAME + +cargo-report-future-incompatibilities --- Reports any crates which will eventually stop compiling + +## SYNOPSIS + +`cargo report future-incompatibilities` [_options_] + +## DESCRIPTION + +Displays a report of future-incompatible warnings that were emitted during +previous builds. +These are warnings for changes that may become hard errors in the future, +causing dependencies to stop building in a future version of rustc. + +For more, see the chapter on [Future incompat report](../reference/future-incompat-report.html). + +## OPTIONS + +
+ +
--id id
+

Show the report with the specified Cargo-generated id. +If not specified, shows the most recent report.

+
+ + +
+ +### Package Selection + +By default, the package in the current working directory is selected. The `-p` +flag can be used to choose a different package in a workspace. + +
+ +
-p spec
+
--package spec
+

The package to display a report for. See cargo-pkgid(1) for the SPEC +format.

+
+ + +
+ +### Display Options + +
+
-v
+
--verbose
+

Use verbose output. May be specified twice for “very verbose” output which +includes extra output such as dependency warnings and build script output. +May also be specified with the term.verbose +config value.

+
+ + +
-q
+
--quiet
+

Do not print cargo log messages. +May also be specified with the term.quiet +config value.

+
+ + +
--color when
+

Control when colored output is used. Valid values:

+
    +
  • auto (default): Automatically detect if color support is available on the +terminal.
  • +
  • always: Always display colors.
  • +
  • never: Never display colors.
  • +
+

May also be specified with the term.color +config value.

+
+ +
+ +### Manifest Options + +
+
--locked
+

Asserts that the exact same dependencies and versions are used as when the +existing Cargo.lock file was originally generated. Cargo will exit with an +error when either of the following scenarios arises:

+
    +
  • The lock file is missing.
  • +
  • Cargo attempted to change the lock file due to a different dependency resolution.
  • +
+

It may be used in environments where deterministic builds are desired, +such as in CI pipelines.

+
+ + +
--offline
+

Prevents Cargo from accessing the network for any reason. Without this +flag, Cargo will stop with an error if it needs to access the network and +the network is not available. With this flag, Cargo will attempt to +proceed without the network if possible.

+

Beware that this may result in different dependency resolution than online +mode. Cargo will restrict itself to crates that are downloaded locally, even +if there might be a newer version as indicated in the local copy of the index. +See the cargo-fetch(1) command to download dependencies before going +offline.

+

May also be specified with the net.offline config value.

+
+ + +
--frozen
+

Equivalent to specifying both --locked and --offline.

+
+ +
+ +### Common Options + +
+ +
+toolchain
+

If Cargo has been installed with rustup, and the first argument to cargo +begins with +, it will be interpreted as a rustup toolchain name (such +as +stable or +nightly). +See the rustup documentation +for more information about how toolchain overrides work.

+
+ + +
--config KEY=VALUE or PATH
+

Overrides a Cargo configuration value. The argument should be in TOML syntax of KEY=VALUE, +or provided as a path to an extra configuration file. This flag may be specified multiple times. +See the command-line overrides section for more information.

+
+ + +
-C PATH
+

Changes the current working directory before executing any specified operations. This affects +things like where cargo looks by default for the project manifest (Cargo.toml), as well as +the directories searched for discovering .cargo/config.toml, for example. This option must +appear before the command name, for example cargo -C path/to/my-project build.

+

This option is only available on the nightly +channel and +requires the -Z unstable-options flag to enable (see +#10098).

+
+ + +
-h
+
--help
+

Prints help information.

+
+ + +
-Z flag
+

Unstable (nightly-only) flags to Cargo. Run cargo -Z help for details.

+
+ + +
+ +## ENVIRONMENT + +See [the reference](../reference/environment-variables.html) for +details on environment variables that Cargo reads. + +## EXIT STATUS + +* `0`: Cargo succeeded. +* `101`: Cargo failed to complete. + +## EXAMPLES + +1. Display the latest future-incompat report: + + cargo report future-incompat + +2. Display the latest future-incompat report for a specific package: + + cargo report future-incompat --package my-dep@0.0.1 + +## SEE ALSO + +[cargo(1)](cargo.html), [cargo-report(1)](cargo-report.html), [cargo-build(1)](cargo-build.html) diff --git a/src/doc/src/commands/cargo-report.md b/src/doc/src/commands/cargo-report.md index f7553b14c73..048ac94a8f1 100644 --- a/src/doc/src/commands/cargo-report.md +++ b/src/doc/src/commands/cargo-report.md @@ -8,38 +8,143 @@ cargo-report --- Generate and display various kinds of reports `cargo report` _type_ [_options_] -### DESCRIPTION +## DESCRIPTION Displays a report of the given _type_ --- currently, only `future-incompat` is supported ## OPTIONS +### Display Options +
+
-v
+
--verbose
+

Use verbose output. May be specified twice for “very verbose” output which +includes extra output such as dependency warnings and build script output. +May also be specified with the term.verbose +config value.

+
+ + +
-q
+
--quiet
+

Do not print cargo log messages. +May also be specified with the term.quiet +config value.

+
-
--id id
-

Show the report with the specified Cargo-generated id

+ +
--color when
+

Control when colored output is used. Valid values:

+
    +
  • auto (default): Automatically detect if color support is available on the +terminal.
  • +
  • always: Always display colors.
  • +
  • never: Never display colors.
  • +
+

May also be specified with the term.color +config value.

+
+ +### Manifest Options -
-p spec
-
--package spec
-

Only display a report for the specified package

+
+
--locked
+

Asserts that the exact same dependencies and versions are used as when the +existing Cargo.lock file was originally generated. Cargo will exit with an +error when either of the following scenarios arises:

+
    +
  • The lock file is missing.
  • +
  • Cargo attempted to change the lock file due to a different dependency resolution.
  • +
+

It may be used in environments where deterministic builds are desired, +such as in CI pipelines.

+
--offline
+

Prevents Cargo from accessing the network for any reason. Without this +flag, Cargo will stop with an error if it needs to access the network and +the network is not available. With this flag, Cargo will attempt to +proceed without the network if possible.

+

Beware that this may result in different dependency resolution than online +mode. Cargo will restrict itself to crates that are downloaded locally, even +if there might be a newer version as indicated in the local copy of the index. +See the cargo-fetch(1) command to download dependencies before going +offline.

+

May also be specified with the net.offline config value.

+
+ + +
--frozen
+

Equivalent to specifying both --locked and --offline.

+
+
-## EXAMPLES +### Common Options + +
+ +
+toolchain
+

If Cargo has been installed with rustup, and the first argument to cargo +begins with +, it will be interpreted as a rustup toolchain name (such +as +stable or +nightly). +See the rustup documentation +for more information about how toolchain overrides work.

+
-1. Display the latest future-incompat report: - cargo report future-incompat +
--config KEY=VALUE or PATH
+

Overrides a Cargo configuration value. The argument should be in TOML syntax of KEY=VALUE, +or provided as a path to an extra configuration file. This flag may be specified multiple times. +See the command-line overrides section for more information.

+
+ + +
-C PATH
+

Changes the current working directory before executing any specified operations. This affects +things like where cargo looks by default for the project manifest (Cargo.toml), as well as +the directories searched for discovering .cargo/config.toml, for example. This option must +appear before the command name, for example cargo -C path/to/my-project build.

+

This option is only available on the nightly +channel and +requires the -Z unstable-options flag to enable (see +#10098).

+
+ + +
-h
+
--help
+

Prints help information.

+
+ + +
-Z flag
+

Unstable (nightly-only) flags to Cargo. Run cargo -Z help for details.

+
+ + +
+ +## ENVIRONMENT + +See [the reference](../reference/environment-variables.html) for +details on environment variables that Cargo reads. + +## EXIT STATUS + +* `0`: Cargo succeeded. +* `101`: Cargo failed to complete. + +## EXAMPLES -2. Display the latest future-incompat report for a specific package: +1. Display the available kinds of reports: - cargo report future-incompat --package my-dep:0.0.1 + cargo report --help ## SEE ALSO -[Future incompat report](../reference/future-incompat-report.html) -[cargo(1)](cargo.html) +[cargo(1)](cargo.html), [cargo-report-future-incompatibilities(1)](cargo-report-future-incompatibilities.html) diff --git a/src/doc/src/commands/cargo.md b/src/doc/src/commands/cargo.md index 03676e24927..ad328144c6f 100644 --- a/src/doc/src/commands/cargo.md +++ b/src/doc/src/commands/cargo.md @@ -123,6 +123,14 @@ available at . [cargo-yank(1)](cargo-yank.html)\     Remove a pushed crate from the index. +### Report Commands + +[cargo-report(1)](cargo-report.html)\ +    Generate and display various kinds of reports. + +[cargo-report-future-incompatibilities(1)](cargo-report-future-incompatibilities.html)\ +    Reports any crates which will eventually stop compiling. + ### General Commands [cargo-help(1)](cargo-help.html)\ diff --git a/src/doc/src/commands/index.md b/src/doc/src/commands/index.md index 8de601a618d..5e636823c16 100644 --- a/src/doc/src/commands/index.md +++ b/src/doc/src/commands/index.md @@ -4,4 +4,5 @@ * [Manifest Commands](manifest-commands.md) * [Package Commands](package-commands.md) * [Publishing Commands](publishing-commands.md) +* [Report Commands](report-commands.md) * [Deprecated and Removed](deprecated-and-removed.md) diff --git a/src/doc/src/commands/report-commands.md b/src/doc/src/commands/report-commands.md new file mode 100644 index 00000000000..6e97cb65dc1 --- /dev/null +++ b/src/doc/src/commands/report-commands.md @@ -0,0 +1,3 @@ +# Report Commands + +* [cargo report](cargo-report.md) diff --git a/src/etc/man/cargo-help.1 b/src/etc/man/cargo-help.1 index 655328550c0..46c2873e4a5 100644 --- a/src/etc/man/cargo-help.1 +++ b/src/etc/man/cargo-help.1 @@ -9,6 +9,150 @@ cargo\-help \[em] Get help for a Cargo command \fBcargo help\fR [\fIsubcommand\fR] .SH "DESCRIPTION" Prints a help message for the given command. +.sp +For nested commands (commands with subcommands), separate the command levels +with spaces. For example, \fBcargo help report future\-incompatibilities\fR displays +help for the \fBcargo report future\-incompatibilities\fR command. +.sp +The dash\-joined form (\fBcargo help report\-future\-incompatibilities\fR) also works +for compatibility. +.sp +Note that spaces only separate hierarchy levels between a parent command and its +subcommands. Dashes that are part of a command\[cq]s name (like \fBgenerate\-lockfile\fR) +must always be preserved. +.SH "OPTIONS" +.SS "Display Options" +.sp +\fB\-v\fR, +\fB\-\-verbose\fR +.RS 4 +Use verbose output. May be specified twice for \[lq]very verbose\[rq] output which +includes extra output such as dependency warnings and build script output. +May also be specified with the \fBterm.verbose\fR +\fIconfig value\fR \&. +.RE +.sp +\fB\-q\fR, +\fB\-\-quiet\fR +.RS 4 +Do not print cargo log messages. +May also be specified with the \fBterm.quiet\fR +\fIconfig value\fR \&. +.RE +.sp +\fB\-\-color\fR \fIwhen\fR +.RS 4 +Control when colored output is used. Valid values: +.sp +.RS 4 +\h'-04'\(bu\h'+03'\fBauto\fR (default): Automatically detect if color support is available on the +terminal. +.RE +.sp +.RS 4 +\h'-04'\(bu\h'+03'\fBalways\fR: Always display colors. +.RE +.sp +.RS 4 +\h'-04'\(bu\h'+03'\fBnever\fR: Never display colors. +.RE +.sp +May also be specified with the \fBterm.color\fR +\fIconfig value\fR \&. +.RE +.SS "Manifest Options" +.sp +\fB\-\-locked\fR +.RS 4 +Asserts that the exact same dependencies and versions are used as when the +existing \fBCargo.lock\fR file was originally generated. Cargo will exit with an +error when either of the following scenarios arises: +.sp +.RS 4 +\h'-04'\(bu\h'+03'The lock file is missing. +.RE +.sp +.RS 4 +\h'-04'\(bu\h'+03'Cargo attempted to change the lock file due to a different dependency resolution. +.RE +.sp +It may be used in environments where deterministic builds are desired, +such as in CI pipelines. +.RE +.sp +\fB\-\-offline\fR +.RS 4 +Prevents Cargo from accessing the network for any reason. Without this +flag, Cargo will stop with an error if it needs to access the network and +the network is not available. With this flag, Cargo will attempt to +proceed without the network if possible. +.sp +Beware that this may result in different dependency resolution than online +mode. Cargo will restrict itself to crates that are downloaded locally, even +if there might be a newer version as indicated in the local copy of the index. +See the \fBcargo\-fetch\fR(1) command to download dependencies before going +offline. +.sp +May also be specified with the \fBnet.offline\fR \fIconfig value\fR \&. +.RE +.sp +\fB\-\-frozen\fR +.RS 4 +Equivalent to specifying both \fB\-\-locked\fR and \fB\-\-offline\fR\&. +.RE +.SS "Common Options" +.sp +\fB+\fR\fItoolchain\fR +.RS 4 +If Cargo has been installed with rustup, and the first argument to \fBcargo\fR +begins with \fB+\fR, it will be interpreted as a rustup toolchain name (such +as \fB+stable\fR or \fB+nightly\fR). +See the \fIrustup documentation\fR +for more information about how toolchain overrides work. +.RE +.sp +\fB\-\-config\fR \fIKEY=VALUE\fR or \fIPATH\fR +.RS 4 +Overrides a Cargo configuration value. The argument should be in TOML syntax of \fBKEY=VALUE\fR, +or provided as a path to an extra configuration file. This flag may be specified multiple times. +See the \fIcommand\-line overrides section\fR for more information. +.RE +.sp +\fB\-C\fR \fIPATH\fR +.RS 4 +Changes the current working directory before executing any specified operations. This affects +things like where cargo looks by default for the project manifest (\fBCargo.toml\fR), as well as +the directories searched for discovering \fB\&.cargo/config.toml\fR, for example. This option must +appear before the command name, for example \fBcargo \-C path/to/my\-project build\fR\&. +.sp +This option is only available on the \fInightly +channel\fR and +requires the \fB\-Z unstable\-options\fR flag to enable (see +\fI#10098\fR ). +.RE +.sp +\fB\-h\fR, +\fB\-\-help\fR +.RS 4 +Prints help information. +.RE +.sp +\fB\-Z\fR \fIflag\fR +.RS 4 +Unstable (nightly\-only) flags to Cargo. Run \fBcargo \-Z help\fR for details. +.RE +.SH "ENVIRONMENT" +See \fIthe reference\fR for +details on environment variables that Cargo reads. +.SH "EXIT STATUS" +.sp +.RS 4 +\h'-04'\(bu\h'+03'\fB0\fR: Cargo succeeded. +.RE +.sp +.RS 4 +\h'-04'\(bu\h'+03'\fB101\fR: Cargo failed to complete. +.RE .SH "EXAMPLES" .sp .RS 4 @@ -22,7 +166,27 @@ cargo help build .RE .sp .RS 4 -\h'-04' 2.\h'+01'Help is also available with the \fB\-\-help\fR flag: +\h'-04' 2.\h'+01'Get help for a nested command: +.sp +.RS 4 +.nf +cargo help report future\-incompatibilities +.fi +.RE +.RE +.sp +.RS 4 +\h'-04' 3.\h'+01'The dash\-joined form also works: +.sp +.RS 4 +.nf +cargo help report\-future\-incompatibilities +.fi +.RE +.RE +.sp +.RS 4 +\h'-04' 4.\h'+01'Help is also available with the \fB\-\-help\fR flag: .sp .RS 4 .nf diff --git a/src/etc/man/cargo-remove.1 b/src/etc/man/cargo-remove.1 index 2ab2dfc73c6..2fb0fa0bb07 100644 --- a/src/etc/man/cargo-remove.1 +++ b/src/etc/man/cargo-remove.1 @@ -216,11 +216,11 @@ cargo remove \-\-dev trybuild .RE .sp .RS 4 -\h'-04' 3.\h'+01'Remove \fBnom\fR from the \fBx86_64\-pc\-windows\-gnu\fR dependencies table +\h'-04' 3.\h'+01'Remove \fBnom\fR from the \fBwasm32\-unknown\-unknown\fR dependencies table .sp .RS 4 .nf -cargo remove \-\-target x86_64\-pc\-windows\-gnu nom +cargo remove \-\-target wasm32\-unknown\-unknown nom .fi .RE .RE diff --git a/src/etc/man/cargo-report-future-incompatibilities.1 b/src/etc/man/cargo-report-future-incompatibilities.1 new file mode 100644 index 00000000000..5c749f189bb --- /dev/null +++ b/src/etc/man/cargo-report-future-incompatibilities.1 @@ -0,0 +1,188 @@ +'\" t +.TH "CARGO\-REPORT\-FUTURE\-INCOMPATIBILITIES" "1" +.nh +.ad l +.ss \n[.ss] 0 +.SH "NAME" +cargo\-report\-future\-incompatibilities \[em] Reports any crates which will eventually stop compiling +.SH "SYNOPSIS" +\fBcargo report future\-incompatibilities\fR [\fIoptions\fR] +.SH "DESCRIPTION" +Displays a report of future\-incompatible warnings that were emitted during +previous builds. +These are warnings for changes that may become hard errors in the future, +causing dependencies to stop building in a future version of rustc. +.sp +For more, see the chapter on \fIFuture incompat report\fR \&. +.SH "OPTIONS" +.sp +\fB\-\-id\fR \fIid\fR +.RS 4 +Show the report with the specified Cargo\-generated id. +If not specified, shows the most recent report. +.RE +.SS "Package Selection" +By default, the package in the current working directory is selected. The \fB\-p\fR +flag can be used to choose a different package in a workspace. +.sp +\fB\-p\fR \fIspec\fR, +\fB\-\-package\fR \fIspec\fR +.RS 4 +The package to display a report for. See \fBcargo\-pkgid\fR(1) for the SPEC +format. +.RE +.SS "Display Options" +.sp +\fB\-v\fR, +\fB\-\-verbose\fR +.RS 4 +Use verbose output. May be specified twice for \[lq]very verbose\[rq] output which +includes extra output such as dependency warnings and build script output. +May also be specified with the \fBterm.verbose\fR +\fIconfig value\fR \&. +.RE +.sp +\fB\-q\fR, +\fB\-\-quiet\fR +.RS 4 +Do not print cargo log messages. +May also be specified with the \fBterm.quiet\fR +\fIconfig value\fR \&. +.RE +.sp +\fB\-\-color\fR \fIwhen\fR +.RS 4 +Control when colored output is used. Valid values: +.sp +.RS 4 +\h'-04'\(bu\h'+03'\fBauto\fR (default): Automatically detect if color support is available on the +terminal. +.RE +.sp +.RS 4 +\h'-04'\(bu\h'+03'\fBalways\fR: Always display colors. +.RE +.sp +.RS 4 +\h'-04'\(bu\h'+03'\fBnever\fR: Never display colors. +.RE +.sp +May also be specified with the \fBterm.color\fR +\fIconfig value\fR \&. +.RE +.SS "Manifest Options" +.sp +\fB\-\-locked\fR +.RS 4 +Asserts that the exact same dependencies and versions are used as when the +existing \fBCargo.lock\fR file was originally generated. Cargo will exit with an +error when either of the following scenarios arises: +.sp +.RS 4 +\h'-04'\(bu\h'+03'The lock file is missing. +.RE +.sp +.RS 4 +\h'-04'\(bu\h'+03'Cargo attempted to change the lock file due to a different dependency resolution. +.RE +.sp +It may be used in environments where deterministic builds are desired, +such as in CI pipelines. +.RE +.sp +\fB\-\-offline\fR +.RS 4 +Prevents Cargo from accessing the network for any reason. Without this +flag, Cargo will stop with an error if it needs to access the network and +the network is not available. With this flag, Cargo will attempt to +proceed without the network if possible. +.sp +Beware that this may result in different dependency resolution than online +mode. Cargo will restrict itself to crates that are downloaded locally, even +if there might be a newer version as indicated in the local copy of the index. +See the \fBcargo\-fetch\fR(1) command to download dependencies before going +offline. +.sp +May also be specified with the \fBnet.offline\fR \fIconfig value\fR \&. +.RE +.sp +\fB\-\-frozen\fR +.RS 4 +Equivalent to specifying both \fB\-\-locked\fR and \fB\-\-offline\fR\&. +.RE +.SS "Common Options" +.sp +\fB+\fR\fItoolchain\fR +.RS 4 +If Cargo has been installed with rustup, and the first argument to \fBcargo\fR +begins with \fB+\fR, it will be interpreted as a rustup toolchain name (such +as \fB+stable\fR or \fB+nightly\fR). +See the \fIrustup documentation\fR +for more information about how toolchain overrides work. +.RE +.sp +\fB\-\-config\fR \fIKEY=VALUE\fR or \fIPATH\fR +.RS 4 +Overrides a Cargo configuration value. The argument should be in TOML syntax of \fBKEY=VALUE\fR, +or provided as a path to an extra configuration file. This flag may be specified multiple times. +See the \fIcommand\-line overrides section\fR for more information. +.RE +.sp +\fB\-C\fR \fIPATH\fR +.RS 4 +Changes the current working directory before executing any specified operations. This affects +things like where cargo looks by default for the project manifest (\fBCargo.toml\fR), as well as +the directories searched for discovering \fB\&.cargo/config.toml\fR, for example. This option must +appear before the command name, for example \fBcargo \-C path/to/my\-project build\fR\&. +.sp +This option is only available on the \fInightly +channel\fR and +requires the \fB\-Z unstable\-options\fR flag to enable (see +\fI#10098\fR ). +.RE +.sp +\fB\-h\fR, +\fB\-\-help\fR +.RS 4 +Prints help information. +.RE +.sp +\fB\-Z\fR \fIflag\fR +.RS 4 +Unstable (nightly\-only) flags to Cargo. Run \fBcargo \-Z help\fR for details. +.RE +.SH "ENVIRONMENT" +See \fIthe reference\fR for +details on environment variables that Cargo reads. +.SH "EXIT STATUS" +.sp +.RS 4 +\h'-04'\(bu\h'+03'\fB0\fR: Cargo succeeded. +.RE +.sp +.RS 4 +\h'-04'\(bu\h'+03'\fB101\fR: Cargo failed to complete. +.RE +.SH "EXAMPLES" +.sp +.RS 4 +\h'-04' 1.\h'+01'Display the latest future\-incompat report: +.sp +.RS 4 +.nf +cargo report future\-incompat +.fi +.RE +.RE +.sp +.RS 4 +\h'-04' 2.\h'+01'Display the latest future\-incompat report for a specific package: +.sp +.RS 4 +.nf +cargo report future\-incompat \-\-package my\-dep@0.0.1 +.fi +.RE +.RE +.SH "SEE ALSO" +\fBcargo\fR(1), \fBcargo\-report\fR(1), \fBcargo\-build\fR(1) diff --git a/src/etc/man/cargo-report.1 b/src/etc/man/cargo-report.1 index 24b6305699b..f507d6853e6 100644 --- a/src/etc/man/cargo-report.1 +++ b/src/etc/man/cargo-report.1 @@ -7,42 +7,151 @@ cargo\-report \[em] Generate and display various kinds of reports .SH "SYNOPSIS" \fBcargo report\fR \fItype\fR [\fIoptions\fR] -.SS "DESCRIPTION" +.SH "DESCRIPTION" Displays a report of the given \fItype\fR \[em] currently, only \fBfuture\-incompat\fR is supported .SH "OPTIONS" +.SS "Display Options" .sp -\fB\-\-id\fR \fIid\fR +\fB\-v\fR, +\fB\-\-verbose\fR .RS 4 -Show the report with the specified Cargo\-generated id +Use verbose output. May be specified twice for \[lq]very verbose\[rq] output which +includes extra output such as dependency warnings and build script output. +May also be specified with the \fBterm.verbose\fR +\fIconfig value\fR \&. .RE .sp -\fB\-p\fR \fIspec\fR\[u2026], -\fB\-\-package\fR \fIspec\fR\[u2026] +\fB\-q\fR, +\fB\-\-quiet\fR .RS 4 -Only display a report for the specified package +Do not print cargo log messages. +May also be specified with the \fBterm.quiet\fR +\fIconfig value\fR \&. .RE -.SH "EXAMPLES" .sp +\fB\-\-color\fR \fIwhen\fR .RS 4 -\h'-04' 1.\h'+01'Display the latest future\-incompat report: +Control when colored output is used. Valid values: .sp .RS 4 -.nf -cargo report future\-incompat -.fi +\h'-04'\(bu\h'+03'\fBauto\fR (default): Automatically detect if color support is available on the +terminal. +.RE +.sp +.RS 4 +\h'-04'\(bu\h'+03'\fBalways\fR: Always display colors. +.RE +.sp +.RS 4 +\h'-04'\(bu\h'+03'\fBnever\fR: Never display colors. +.RE +.sp +May also be specified with the \fBterm.color\fR +\fIconfig value\fR \&. +.RE +.SS "Manifest Options" +.sp +\fB\-\-locked\fR +.RS 4 +Asserts that the exact same dependencies and versions are used as when the +existing \fBCargo.lock\fR file was originally generated. Cargo will exit with an +error when either of the following scenarios arises: +.sp +.RS 4 +\h'-04'\(bu\h'+03'The lock file is missing. +.RE +.sp +.RS 4 +\h'-04'\(bu\h'+03'Cargo attempted to change the lock file due to a different dependency resolution. +.RE +.sp +It may be used in environments where deterministic builds are desired, +such as in CI pipelines. +.RE +.sp +\fB\-\-offline\fR +.RS 4 +Prevents Cargo from accessing the network for any reason. Without this +flag, Cargo will stop with an error if it needs to access the network and +the network is not available. With this flag, Cargo will attempt to +proceed without the network if possible. +.sp +Beware that this may result in different dependency resolution than online +mode. Cargo will restrict itself to crates that are downloaded locally, even +if there might be a newer version as indicated in the local copy of the index. +See the \fBcargo\-fetch\fR(1) command to download dependencies before going +offline. +.sp +May also be specified with the \fBnet.offline\fR \fIconfig value\fR \&. .RE +.sp +\fB\-\-frozen\fR +.RS 4 +Equivalent to specifying both \fB\-\-locked\fR and \fB\-\-offline\fR\&. +.RE +.SS "Common Options" +.sp +\fB+\fR\fItoolchain\fR +.RS 4 +If Cargo has been installed with rustup, and the first argument to \fBcargo\fR +begins with \fB+\fR, it will be interpreted as a rustup toolchain name (such +as \fB+stable\fR or \fB+nightly\fR). +See the \fIrustup documentation\fR +for more information about how toolchain overrides work. +.RE +.sp +\fB\-\-config\fR \fIKEY=VALUE\fR or \fIPATH\fR +.RS 4 +Overrides a Cargo configuration value. The argument should be in TOML syntax of \fBKEY=VALUE\fR, +or provided as a path to an extra configuration file. This flag may be specified multiple times. +See the \fIcommand\-line overrides section\fR for more information. +.RE +.sp +\fB\-C\fR \fIPATH\fR +.RS 4 +Changes the current working directory before executing any specified operations. This affects +things like where cargo looks by default for the project manifest (\fBCargo.toml\fR), as well as +the directories searched for discovering \fB\&.cargo/config.toml\fR, for example. This option must +appear before the command name, for example \fBcargo \-C path/to/my\-project build\fR\&. +.sp +This option is only available on the \fInightly +channel\fR and +requires the \fB\-Z unstable\-options\fR flag to enable (see +\fI#10098\fR ). +.RE +.sp +\fB\-h\fR, +\fB\-\-help\fR +.RS 4 +Prints help information. .RE .sp +\fB\-Z\fR \fIflag\fR .RS 4 -\h'-04' 2.\h'+01'Display the latest future\-incompat report for a specific package: +Unstable (nightly\-only) flags to Cargo. Run \fBcargo \-Z help\fR for details. +.RE +.SH "ENVIRONMENT" +See \fIthe reference\fR for +details on environment variables that Cargo reads. +.SH "EXIT STATUS" +.sp +.RS 4 +\h'-04'\(bu\h'+03'\fB0\fR: Cargo succeeded. +.RE +.sp +.RS 4 +\h'-04'\(bu\h'+03'\fB101\fR: Cargo failed to complete. +.RE +.SH "EXAMPLES" +.sp +.RS 4 +\h'-04' 1.\h'+01'Display the available kinds of reports: .sp .RS 4 .nf -cargo report future\-incompat \-\-package my\-dep:0.0.1 +cargo report \-\-help .fi .RE .RE .SH "SEE ALSO" -\fIFuture incompat report\fR -.sp -\fBcargo\fR(1) +\fBcargo\fR(1), \fBcargo\-report\-future\-incompatibilities\fR(1) diff --git a/src/etc/man/cargo.1 b/src/etc/man/cargo.1 index 80c8682a6ef..a45843c5ff0 100644 --- a/src/etc/man/cargo.1 +++ b/src/etc/man/cargo.1 @@ -147,6 +147,14 @@ available at \&. \fBcargo\-yank\fR(1) .br \ \ \ \ Remove a pushed crate from the index. +.SS "Report Commands" +\fBcargo\-report\fR(1) +.br +\ \ \ \ Generate and display various kinds of reports. +.sp +\fBcargo\-report\-future\-incompatibilities\fR(1) +.br +\ \ \ \ Reports any crates which will eventually stop compiling. .SS "General Commands" \fBcargo\-help\fR(1) .br diff --git a/tests/testsuite/cargo_help/help/stdout.term.svg b/tests/testsuite/cargo_help/help/stdout.term.svg index d96174b1420..9c218202366 100644 --- a/tests/testsuite/cargo_help/help/stdout.term.svg +++ b/tests/testsuite/cargo_help/help/stdout.term.svg @@ -24,13 +24,13 @@ - Usage: cargo[EXE] help [OPTIONS] [COMMAND] + Usage: cargo[EXE] help [OPTIONS] [COMMAND]... Arguments: - [COMMAND] + [COMMAND]... diff --git a/tests/testsuite/cargo_help/mod.rs b/tests/testsuite/cargo_help/mod.rs index c0ce1118071..6573e04768e 100644 --- a/tests/testsuite/cargo_help/mod.rs +++ b/tests/testsuite/cargo_help/mod.rs @@ -1 +1,11 @@ mod help; +mod nested_alias_dash_joined; +mod nested_cmd; +mod nested_cmd_dash_joined; +mod nested_cmd_suggestion; +mod nested_cmd_with_extra_flags; +mod single_alias; +mod single_cmd; +mod single_cmd_space_joined; +mod single_cmd_suggestion; +mod single_cmd_with_extra_flags; diff --git a/tests/testsuite/cargo_help/nested_alias_dash_joined/mod.rs b/tests/testsuite/cargo_help/nested_alias_dash_joined/mod.rs new file mode 100644 index 00000000000..d1d2dfc84d5 --- /dev/null +++ b/tests/testsuite/cargo_help/nested_alias_dash_joined/mod.rs @@ -0,0 +1,14 @@ +use crate::prelude::*; +use cargo_test_support::file; + +#[cargo_test] +fn case() { + snapbox::cmd::Command::cargo_ui() + .env("__CARGO_TEST_FORCE_HELP_TXT", "1") + .arg("help") + .arg("report-future-incompat") + .assert() + .success() + .stdout_eq(file!["stdout.term.txt"]) + .stderr_eq(file!["stderr.term.svg"]); +} diff --git a/tests/testsuite/cargo_help/nested_alias_dash_joined/stderr.term.svg b/tests/testsuite/cargo_help/nested_alias_dash_joined/stderr.term.svg new file mode 100644 index 00000000000..824d5a945cf --- /dev/null +++ b/tests/testsuite/cargo_help/nested_alias_dash_joined/stderr.term.svg @@ -0,0 +1,21 @@ + + + + + + + + + diff --git a/tests/testsuite/cargo_help/nested_alias_dash_joined/stdout.term.txt b/tests/testsuite/cargo_help/nested_alias_dash_joined/stdout.term.txt new file mode 100644 index 00000000000..6caa69b8030 --- /dev/null +++ b/tests/testsuite/cargo_help/nested_alias_dash_joined/stdout.term.txt @@ -0,0 +1,148 @@ +CARGO-REPORT-FUTURE-INCOMPATIBILITIES(1) + +NAME + cargo-report-future-incompatibilities — Reports any crates which will + eventually stop compiling + +SYNOPSIS + cargo report future-incompatibilities [options] + +DESCRIPTION + Displays a report of future-incompatible warnings that were emitted + during previous builds. These are warnings for changes that may become + hard errors in the future, causing dependencies to stop building in a + future version of rustc. + + For more, see the chapter on Future incompat report + . + +OPTIONS + --id id + Show the report with the specified Cargo-generated id. If not + specified, shows the most recent report. + + Package Selection + By default, the package in the current working directory is selected. + The -p flag can be used to choose a different package in a workspace. + + -p spec, --package spec + The package to display a report for. See cargo-pkgid(1) for the SPEC + format. + + Display Options + -v, --verbose + Use verbose output. May be specified twice for “very verbose” + output which includes extra output such as dependency warnings and + build script output. May also be specified with the term.verbose + config value + . + + -q, --quiet + Do not print cargo log messages. May also be specified with the + term.quiet config value + . + + --color when + Control when colored output is used. Valid values: + + o auto (default): Automatically detect if color support is + available on the terminal. + + o always: Always display colors. + + o never: Never display colors. + + May also be specified with the term.color config value + . + + Manifest Options + --locked + Asserts that the exact same dependencies and versions are used as + when the existing Cargo.lock file was originally generated. Cargo + will exit with an error when either of the following scenarios + arises: + + o The lock file is missing. + + o Cargo attempted to change the lock file due to a different + dependency resolution. + + It may be used in environments where deterministic builds are + desired, such as in CI pipelines. + + --offline + Prevents Cargo from accessing the network for any reason. Without + this flag, Cargo will stop with an error if it needs to access the + network and the network is not available. With this flag, Cargo will + attempt to proceed without the network if possible. + + Beware that this may result in different dependency resolution than + online mode. Cargo will restrict itself to crates that are + downloaded locally, even if there might be a newer version as + indicated in the local copy of the index. See the cargo-fetch(1) + command to download dependencies before going offline. + + May also be specified with the net.offline config value + . + + --frozen + Equivalent to specifying both --locked and --offline. + + Common Options + +toolchain + If Cargo has been installed with rustup, and the first argument to + cargo begins with +, it will be interpreted as a rustup toolchain + name (such as +stable or +nightly). See the rustup documentation + for more + information about how toolchain overrides work. + + --config KEY=VALUE or PATH + Overrides a Cargo configuration value. The argument should be in + TOML syntax of KEY=VALUE, or provided as a path to an extra + configuration file. This flag may be specified multiple times. See + the command-line overrides section + + for more information. + + -C PATH + Changes the current working directory before executing any specified + operations. This affects things like where cargo looks by default + for the project manifest (Cargo.toml), as well as the directories + searched for discovering .cargo/config.toml, for example. This + option must appear before the command name, for example cargo -C + path/to/my-project build. + + This option is only available on the nightly channel + and + requires the -Z unstable-options flag to enable (see #10098 + ). + + -h, --help + Prints help information. + + -Z flag + Unstable (nightly-only) flags to Cargo. Run cargo -Z help for + details. + +ENVIRONMENT + See the reference + + for details on environment variables that Cargo reads. + +EXIT STATUS + o 0: Cargo succeeded. + + o 101: Cargo failed to complete. + +EXAMPLES + 1. Display the latest future-incompat report: + + cargo report future-incompat + + 2. Display the latest future-incompat report for a specific package: + + cargo report future-incompat --package my-dep@0.0.1 + +SEE ALSO + cargo(1), cargo-report(1), cargo-build(1) + diff --git a/tests/testsuite/cargo_help/nested_cmd/mod.rs b/tests/testsuite/cargo_help/nested_cmd/mod.rs new file mode 100644 index 00000000000..644b3895b4d --- /dev/null +++ b/tests/testsuite/cargo_help/nested_cmd/mod.rs @@ -0,0 +1,15 @@ +use crate::prelude::*; +use cargo_test_support::file; + +#[cargo_test] +fn case() { + snapbox::cmd::Command::cargo_ui() + .env("__CARGO_TEST_FORCE_HELP_TXT", "1") + .arg("help") + .arg("report") + .arg("future-incompatibilities") + .assert() + .success() + .stdout_eq(file!["stdout.term.txt"]) + .stderr_eq(file!["stderr.term.svg"]); +} diff --git a/tests/testsuite/cargo_help/nested_cmd/stderr.term.svg b/tests/testsuite/cargo_help/nested_cmd/stderr.term.svg new file mode 100644 index 00000000000..824d5a945cf --- /dev/null +++ b/tests/testsuite/cargo_help/nested_cmd/stderr.term.svg @@ -0,0 +1,21 @@ + + + + + + + + + diff --git a/tests/testsuite/cargo_help/nested_cmd/stdout.term.txt b/tests/testsuite/cargo_help/nested_cmd/stdout.term.txt new file mode 100644 index 00000000000..6caa69b8030 --- /dev/null +++ b/tests/testsuite/cargo_help/nested_cmd/stdout.term.txt @@ -0,0 +1,148 @@ +CARGO-REPORT-FUTURE-INCOMPATIBILITIES(1) + +NAME + cargo-report-future-incompatibilities — Reports any crates which will + eventually stop compiling + +SYNOPSIS + cargo report future-incompatibilities [options] + +DESCRIPTION + Displays a report of future-incompatible warnings that were emitted + during previous builds. These are warnings for changes that may become + hard errors in the future, causing dependencies to stop building in a + future version of rustc. + + For more, see the chapter on Future incompat report + . + +OPTIONS + --id id + Show the report with the specified Cargo-generated id. If not + specified, shows the most recent report. + + Package Selection + By default, the package in the current working directory is selected. + The -p flag can be used to choose a different package in a workspace. + + -p spec, --package spec + The package to display a report for. See cargo-pkgid(1) for the SPEC + format. + + Display Options + -v, --verbose + Use verbose output. May be specified twice for “very verbose” + output which includes extra output such as dependency warnings and + build script output. May also be specified with the term.verbose + config value + . + + -q, --quiet + Do not print cargo log messages. May also be specified with the + term.quiet config value + . + + --color when + Control when colored output is used. Valid values: + + o auto (default): Automatically detect if color support is + available on the terminal. + + o always: Always display colors. + + o never: Never display colors. + + May also be specified with the term.color config value + . + + Manifest Options + --locked + Asserts that the exact same dependencies and versions are used as + when the existing Cargo.lock file was originally generated. Cargo + will exit with an error when either of the following scenarios + arises: + + o The lock file is missing. + + o Cargo attempted to change the lock file due to a different + dependency resolution. + + It may be used in environments where deterministic builds are + desired, such as in CI pipelines. + + --offline + Prevents Cargo from accessing the network for any reason. Without + this flag, Cargo will stop with an error if it needs to access the + network and the network is not available. With this flag, Cargo will + attempt to proceed without the network if possible. + + Beware that this may result in different dependency resolution than + online mode. Cargo will restrict itself to crates that are + downloaded locally, even if there might be a newer version as + indicated in the local copy of the index. See the cargo-fetch(1) + command to download dependencies before going offline. + + May also be specified with the net.offline config value + . + + --frozen + Equivalent to specifying both --locked and --offline. + + Common Options + +toolchain + If Cargo has been installed with rustup, and the first argument to + cargo begins with +, it will be interpreted as a rustup toolchain + name (such as +stable or +nightly). See the rustup documentation + for more + information about how toolchain overrides work. + + --config KEY=VALUE or PATH + Overrides a Cargo configuration value. The argument should be in + TOML syntax of KEY=VALUE, or provided as a path to an extra + configuration file. This flag may be specified multiple times. See + the command-line overrides section + + for more information. + + -C PATH + Changes the current working directory before executing any specified + operations. This affects things like where cargo looks by default + for the project manifest (Cargo.toml), as well as the directories + searched for discovering .cargo/config.toml, for example. This + option must appear before the command name, for example cargo -C + path/to/my-project build. + + This option is only available on the nightly channel + and + requires the -Z unstable-options flag to enable (see #10098 + ). + + -h, --help + Prints help information. + + -Z flag + Unstable (nightly-only) flags to Cargo. Run cargo -Z help for + details. + +ENVIRONMENT + See the reference + + for details on environment variables that Cargo reads. + +EXIT STATUS + o 0: Cargo succeeded. + + o 101: Cargo failed to complete. + +EXAMPLES + 1. Display the latest future-incompat report: + + cargo report future-incompat + + 2. Display the latest future-incompat report for a specific package: + + cargo report future-incompat --package my-dep@0.0.1 + +SEE ALSO + cargo(1), cargo-report(1), cargo-build(1) + diff --git a/tests/testsuite/cargo_help/nested_cmd_dash_joined/mod.rs b/tests/testsuite/cargo_help/nested_cmd_dash_joined/mod.rs new file mode 100644 index 00000000000..b01a3697f47 --- /dev/null +++ b/tests/testsuite/cargo_help/nested_cmd_dash_joined/mod.rs @@ -0,0 +1,14 @@ +use crate::prelude::*; +use cargo_test_support::file; + +#[cargo_test] +fn case() { + snapbox::cmd::Command::cargo_ui() + .env("__CARGO_TEST_FORCE_HELP_TXT", "1") + .arg("help") + .arg("report-future-incompatibilities") + .assert() + .success() + .stdout_eq(file!["stdout.term.txt"]) + .stderr_eq(file!["stderr.term.svg"]); +} diff --git a/tests/testsuite/cargo_help/nested_cmd_dash_joined/stderr.term.svg b/tests/testsuite/cargo_help/nested_cmd_dash_joined/stderr.term.svg new file mode 100644 index 00000000000..824d5a945cf --- /dev/null +++ b/tests/testsuite/cargo_help/nested_cmd_dash_joined/stderr.term.svg @@ -0,0 +1,21 @@ + + + + + + + + + diff --git a/tests/testsuite/cargo_help/nested_cmd_dash_joined/stdout.term.txt b/tests/testsuite/cargo_help/nested_cmd_dash_joined/stdout.term.txt new file mode 100644 index 00000000000..6caa69b8030 --- /dev/null +++ b/tests/testsuite/cargo_help/nested_cmd_dash_joined/stdout.term.txt @@ -0,0 +1,148 @@ +CARGO-REPORT-FUTURE-INCOMPATIBILITIES(1) + +NAME + cargo-report-future-incompatibilities — Reports any crates which will + eventually stop compiling + +SYNOPSIS + cargo report future-incompatibilities [options] + +DESCRIPTION + Displays a report of future-incompatible warnings that were emitted + during previous builds. These are warnings for changes that may become + hard errors in the future, causing dependencies to stop building in a + future version of rustc. + + For more, see the chapter on Future incompat report + . + +OPTIONS + --id id + Show the report with the specified Cargo-generated id. If not + specified, shows the most recent report. + + Package Selection + By default, the package in the current working directory is selected. + The -p flag can be used to choose a different package in a workspace. + + -p spec, --package spec + The package to display a report for. See cargo-pkgid(1) for the SPEC + format. + + Display Options + -v, --verbose + Use verbose output. May be specified twice for “very verbose” + output which includes extra output such as dependency warnings and + build script output. May also be specified with the term.verbose + config value + . + + -q, --quiet + Do not print cargo log messages. May also be specified with the + term.quiet config value + . + + --color when + Control when colored output is used. Valid values: + + o auto (default): Automatically detect if color support is + available on the terminal. + + o always: Always display colors. + + o never: Never display colors. + + May also be specified with the term.color config value + . + + Manifest Options + --locked + Asserts that the exact same dependencies and versions are used as + when the existing Cargo.lock file was originally generated. Cargo + will exit with an error when either of the following scenarios + arises: + + o The lock file is missing. + + o Cargo attempted to change the lock file due to a different + dependency resolution. + + It may be used in environments where deterministic builds are + desired, such as in CI pipelines. + + --offline + Prevents Cargo from accessing the network for any reason. Without + this flag, Cargo will stop with an error if it needs to access the + network and the network is not available. With this flag, Cargo will + attempt to proceed without the network if possible. + + Beware that this may result in different dependency resolution than + online mode. Cargo will restrict itself to crates that are + downloaded locally, even if there might be a newer version as + indicated in the local copy of the index. See the cargo-fetch(1) + command to download dependencies before going offline. + + May also be specified with the net.offline config value + . + + --frozen + Equivalent to specifying both --locked and --offline. + + Common Options + +toolchain + If Cargo has been installed with rustup, and the first argument to + cargo begins with +, it will be interpreted as a rustup toolchain + name (such as +stable or +nightly). See the rustup documentation + for more + information about how toolchain overrides work. + + --config KEY=VALUE or PATH + Overrides a Cargo configuration value. The argument should be in + TOML syntax of KEY=VALUE, or provided as a path to an extra + configuration file. This flag may be specified multiple times. See + the command-line overrides section + + for more information. + + -C PATH + Changes the current working directory before executing any specified + operations. This affects things like where cargo looks by default + for the project manifest (Cargo.toml), as well as the directories + searched for discovering .cargo/config.toml, for example. This + option must appear before the command name, for example cargo -C + path/to/my-project build. + + This option is only available on the nightly channel + and + requires the -Z unstable-options flag to enable (see #10098 + ). + + -h, --help + Prints help information. + + -Z flag + Unstable (nightly-only) flags to Cargo. Run cargo -Z help for + details. + +ENVIRONMENT + See the reference + + for details on environment variables that Cargo reads. + +EXIT STATUS + o 0: Cargo succeeded. + + o 101: Cargo failed to complete. + +EXAMPLES + 1. Display the latest future-incompat report: + + cargo report future-incompat + + 2. Display the latest future-incompat report for a specific package: + + cargo report future-incompat --package my-dep@0.0.1 + +SEE ALSO + cargo(1), cargo-report(1), cargo-build(1) + diff --git a/tests/testsuite/cargo_help/nested_cmd_suggestion/mod.rs b/tests/testsuite/cargo_help/nested_cmd_suggestion/mod.rs new file mode 100644 index 00000000000..e01c165e46e --- /dev/null +++ b/tests/testsuite/cargo_help/nested_cmd_suggestion/mod.rs @@ -0,0 +1,14 @@ +use crate::prelude::*; +use cargo_test_support::file; + +#[cargo_test] +fn case() { + snapbox::cmd::Command::cargo_ui() + .env("__CARGO_TEST_FORCE_HELP_TXT", "1") + .arg("help") + .arg("report-future-incomp") + .assert() + .code(101) + .stdout_eq(file!["stdout.term.txt"]) + .stderr_eq(file!["stderr.term.svg"]); +} diff --git a/tests/testsuite/cargo_help/nested_cmd_suggestion/stderr.term.svg b/tests/testsuite/cargo_help/nested_cmd_suggestion/stderr.term.svg new file mode 100644 index 00000000000..8bc92080948 --- /dev/null +++ b/tests/testsuite/cargo_help/nested_cmd_suggestion/stderr.term.svg @@ -0,0 +1,33 @@ + + + + + + + error: no such command: `report-future-incomp` + + + + help: view all installed commands with `cargo --list` + + help: find a package to install `report-future-incomp` with `cargo search cargo-report-future-incomp` + + + + + + diff --git a/tests/testsuite/cargo_help/nested_cmd_suggestion/stdout.term.txt b/tests/testsuite/cargo_help/nested_cmd_suggestion/stdout.term.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/testsuite/cargo_help/nested_cmd_with_extra_flags/mod.rs b/tests/testsuite/cargo_help/nested_cmd_with_extra_flags/mod.rs new file mode 100644 index 00000000000..bbf17ce63e8 --- /dev/null +++ b/tests/testsuite/cargo_help/nested_cmd_with_extra_flags/mod.rs @@ -0,0 +1,16 @@ +use crate::prelude::*; +use cargo_test_support::file; + +#[cargo_test] +fn case() { + snapbox::cmd::Command::cargo_ui() + .env("__CARGO_TEST_FORCE_HELP_TXT", "1") + .arg("help") + .arg("report") + .arg("future-incompatibilities") + .arg("--id") + .assert() + .code(1) + .stdout_eq(file!["stdout.term.txt"]) + .stderr_eq(file!["stderr.term.svg"]); +} diff --git a/tests/testsuite/cargo_help/nested_cmd_with_extra_flags/stderr.term.svg b/tests/testsuite/cargo_help/nested_cmd_with_extra_flags/stderr.term.svg new file mode 100644 index 00000000000..b70ca67bcc9 --- /dev/null +++ b/tests/testsuite/cargo_help/nested_cmd_with_extra_flags/stderr.term.svg @@ -0,0 +1,43 @@ + + + + + + + error: unexpected argument '--id' found + + + + tip: to pass '--id' as a value, use '-- --id' + + + + Usage: cargo[EXE] help <COMMAND>... + + + + For more information, try '--help'. + + + + + + diff --git a/tests/testsuite/cargo_help/nested_cmd_with_extra_flags/stdout.term.txt b/tests/testsuite/cargo_help/nested_cmd_with_extra_flags/stdout.term.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/testsuite/cargo_help/single_alias/mod.rs b/tests/testsuite/cargo_help/single_alias/mod.rs new file mode 100644 index 00000000000..b19a8263306 --- /dev/null +++ b/tests/testsuite/cargo_help/single_alias/mod.rs @@ -0,0 +1,14 @@ +use crate::prelude::*; +use cargo_test_support::file; + +#[cargo_test] +fn case() { + snapbox::cmd::Command::cargo_ui() + .env("__CARGO_TEST_FORCE_HELP_TXT", "1") + .arg("help") + .arg("rm") + .assert() + .success() + .stdout_eq(file!["stdout.term.txt"]) + .stderr_eq(file!["stderr.term.svg"]); +} diff --git a/tests/testsuite/cargo_help/single_alias/stderr.term.svg b/tests/testsuite/cargo_help/single_alias/stderr.term.svg new file mode 100644 index 00000000000..824d5a945cf --- /dev/null +++ b/tests/testsuite/cargo_help/single_alias/stderr.term.svg @@ -0,0 +1,21 @@ + + + + + + + + + diff --git a/tests/testsuite/cargo_help/single_alias/stdout.term.txt b/tests/testsuite/cargo_help/single_alias/stdout.term.txt new file mode 100644 index 00000000000..bb4cf128d7b --- /dev/null +++ b/tests/testsuite/cargo_help/single_alias/stdout.term.txt @@ -0,0 +1,176 @@ +CARGO-REMOVE(1) + +NAME + cargo-remove — Remove dependencies from a Cargo.toml manifest file + +SYNOPSIS + cargo remove [options] dependency… + +DESCRIPTION + Remove one or more dependencies from a Cargo.toml manifest. + +OPTIONS + Section options + --dev + Remove as a development dependency + . + + --build + Remove as a build dependency + . + + --target target + Remove as a dependency to the given target platform + . + + To avoid unexpected shell expansions, you may use quotes around each + target, e.g., --target 'cfg(unix)'. + + Miscellaneous Options + --dry-run + Don’t actually write to the manifest. + + Display Options + -v, --verbose + Use verbose output. May be specified twice for “very verbose” + output which includes extra output such as dependency warnings and + build script output. May also be specified with the term.verbose + config value + . + + -q, --quiet + Do not print cargo log messages. May also be specified with the + term.quiet config value + . + + --color when + Control when colored output is used. Valid values: + + o auto (default): Automatically detect if color support is + available on the terminal. + + o always: Always display colors. + + o never: Never display colors. + + May also be specified with the term.color config value + . + + Manifest Options + --manifest-path path + Path to the Cargo.toml file. By default, Cargo searches for the + Cargo.toml file in the current directory or any parent directory. + + --locked + Asserts that the exact same dependencies and versions are used as + when the existing Cargo.lock file was originally generated. Cargo + will exit with an error when either of the following scenarios + arises: + + o The lock file is missing. + + o Cargo attempted to change the lock file due to a different + dependency resolution. + + It may be used in environments where deterministic builds are + desired, such as in CI pipelines. + + --offline + Prevents Cargo from accessing the network for any reason. Without + this flag, Cargo will stop with an error if it needs to access the + network and the network is not available. With this flag, Cargo will + attempt to proceed without the network if possible. + + Beware that this may result in different dependency resolution than + online mode. Cargo will restrict itself to crates that are + downloaded locally, even if there might be a newer version as + indicated in the local copy of the index. See the cargo-fetch(1) + command to download dependencies before going offline. + + May also be specified with the net.offline config value + . + + --frozen + Equivalent to specifying both --locked and --offline. + + --lockfile-path PATH + Changes the path of the lockfile from the default + (/Cargo.lock) to PATH. PATH must end with Cargo.lock + (e.g. --lockfile-path /tmp/temporary-lockfile/Cargo.lock). Note that + providing --lockfile-path will ignore existing lockfile at the + default path, and instead will either use the lockfile from PATH, or + write a new lockfile into the provided PATH if it doesn’t exist. + This flag can be used to run most commands in read-only directories, + writing lockfile into the provided PATH. + + This option is only available on the nightly channel + and + requires the -Z unstable-options flag to enable (see #14421 + ). + + Package Selection + -p spec…, --package spec… + Package to remove from. + + Common Options + +toolchain + If Cargo has been installed with rustup, and the first argument to + cargo begins with +, it will be interpreted as a rustup toolchain + name (such as +stable or +nightly). See the rustup documentation + for more + information about how toolchain overrides work. + + --config KEY=VALUE or PATH + Overrides a Cargo configuration value. The argument should be in + TOML syntax of KEY=VALUE, or provided as a path to an extra + configuration file. This flag may be specified multiple times. See + the command-line overrides section + + for more information. + + -C PATH + Changes the current working directory before executing any specified + operations. This affects things like where cargo looks by default + for the project manifest (Cargo.toml), as well as the directories + searched for discovering .cargo/config.toml, for example. This + option must appear before the command name, for example cargo -C + path/to/my-project build. + + This option is only available on the nightly channel + and + requires the -Z unstable-options flag to enable (see #10098 + ). + + -h, --help + Prints help information. + + -Z flag + Unstable (nightly-only) flags to Cargo. Run cargo -Z help for + details. + +ENVIRONMENT + See the reference + + for details on environment variables that Cargo reads. + +EXIT STATUS + o 0: Cargo succeeded. + + o 101: Cargo failed to complete. + +EXAMPLES + 1. Remove regex as a dependency + + cargo remove regex + + 2. Remove trybuild as a dev-dependency + + cargo remove --dev trybuild + + 3. Remove nom from the wasm32-unknown-unknown dependencies table + + cargo remove --target wasm32-unknown-unknown nom + +SEE ALSO + cargo(1), cargo-add(1) + diff --git a/tests/testsuite/cargo_help/single_cmd/mod.rs b/tests/testsuite/cargo_help/single_cmd/mod.rs new file mode 100644 index 00000000000..37ac12ed01f --- /dev/null +++ b/tests/testsuite/cargo_help/single_cmd/mod.rs @@ -0,0 +1,14 @@ +use crate::prelude::*; +use cargo_test_support::file; + +#[cargo_test] +fn case() { + snapbox::cmd::Command::cargo_ui() + .env("__CARGO_TEST_FORCE_HELP_TXT", "1") + .arg("help") + .arg("build") + .assert() + .success() + .stdout_eq(file!["stdout.term.txt"]) + .stderr_eq(file!["stderr.term.svg"]); +} diff --git a/tests/testsuite/cargo_help/single_cmd/stderr.term.svg b/tests/testsuite/cargo_help/single_cmd/stderr.term.svg new file mode 100644 index 00000000000..824d5a945cf --- /dev/null +++ b/tests/testsuite/cargo_help/single_cmd/stderr.term.svg @@ -0,0 +1,21 @@ + + + + + + + + + diff --git a/tests/testsuite/cargo_help/single_cmd/stdout.term.txt b/tests/testsuite/cargo_help/single_cmd/stdout.term.txt new file mode 100644 index 00000000000..dbc3db31946 --- /dev/null +++ b/tests/testsuite/cargo_help/single_cmd/stdout.term.txt @@ -0,0 +1,407 @@ +CARGO-BUILD(1) + +NAME + cargo-build — Compile the current package + +SYNOPSIS + cargo build [options] + +DESCRIPTION + Compile local packages and all of their dependencies. + +OPTIONS + Package Selection + By default, when no package selection options are given, the packages + selected depend on the selected manifest file (based on the current + working directory if --manifest-path is not given). If the manifest is + the root of a workspace then the workspaces default members are + selected, otherwise only the package defined by the manifest will be + selected. + + The default members of a workspace can be set explicitly with the + workspace.default-members key in the root manifest. If this is not set, + a virtual workspace will include all workspace members (equivalent to + passing --workspace), and a non-virtual workspace will include only the + root crate itself. + + -p spec…, --package spec… + Build only the specified packages. See cargo-pkgid(1) for the SPEC + format. This flag may be specified multiple times and supports + common Unix glob patterns like *, ? and []. However, to avoid your + shell accidentally expanding glob patterns before Cargo handles + them, you must use single quotes or double quotes around each + pattern. + + --workspace + Build all members in the workspace. + + --all + Deprecated alias for --workspace. + + --exclude SPEC… + Exclude the specified packages. Must be used in conjunction with the + --workspace flag. This flag may be specified multiple times and + supports common Unix glob patterns like *, ? and []. However, to + avoid your shell accidentally expanding glob patterns before Cargo + handles them, you must use single quotes or double quotes around + each pattern. + + Target Selection + When no target selection options are given, cargo build will build all + binary and library targets of the selected packages. Binaries are + skipped if they have required-features that are missing. + + Binary targets are automatically built if there is an integration test + or benchmark being selected to build. This allows an integration test to + execute the binary to exercise and test its behavior. The + CARGO_BIN_EXE_ environment variable + + is set when the integration test is built so that it can use the env + macro to locate the + executable. + + Passing target selection flags will build only the specified targets. + + Note that --bin, --example, --test and --bench flags also support common + Unix glob patterns like *, ? and []. However, to avoid your shell + accidentally expanding glob patterns before Cargo handles them, you must + use single quotes or double quotes around each glob pattern. + + --lib + Build the package’s library. + + --bin name… + Build the specified binary. This flag may be specified multiple + times and supports common Unix glob patterns. + + --bins + Build all binary targets. + + --example name… + Build the specified example. This flag may be specified multiple + times and supports common Unix glob patterns. + + --examples + Build all example targets. + + --test name… + Build the specified integration test. This flag may be specified + multiple times and supports common Unix glob patterns. + + --tests + Build all targets that have the test = true manifest flag set. By + default this includes the library and binaries built as unittests, + and integration tests. Be aware that this will also build any + required dependencies, so the lib target may be built twice (once as + a unittest, and once as a dependency for binaries, integration + tests, etc.). Targets may be enabled or disabled by setting the test + flag in the manifest settings for the target. + + --bench name… + Build the specified benchmark. This flag may be specified multiple + times and supports common Unix glob patterns. + + --benches + Build all targets that have the bench = true manifest flag set. By + default this includes the library and binaries built as benchmarks, + and bench targets. Be aware that this will also build any required + dependencies, so the lib target may be built twice (once as a + benchmark, and once as a dependency for binaries, benchmarks, etc.). + Targets may be enabled or disabled by setting the bench flag in the + manifest settings for the target. + + --all-targets + Build all targets. This is equivalent to specifying --lib --bins + --tests --benches --examples. + + Feature Selection + The feature flags allow you to control which features are enabled. When + no feature options are given, the default feature is activated for every + selected package. + + See the features documentation + + for more details. + + -F features, --features features + Space or comma separated list of features to activate. Features of + workspace members may be enabled with package-name/feature-name + syntax. This flag may be specified multiple times, which enables all + specified features. + + --all-features + Activate all available features of all selected packages. + + --no-default-features + Do not activate the default feature of the selected packages. + + Compilation Options + --target triple + Build for the specified target architecture. Flag may be specified + multiple times. The default is the host architecture. The general + format of the triple is ---. + + Possible values: + + o Any supported target in rustc --print target-list. + + o "host-tuple", which will internally be substituted by the + host’s target. This can be particularly useful if you’re + cross-compiling some crates, and don’t want to specify your + host’s machine as a target (for instance, an xtask in a shared + project that may be worked on by many hosts). + + o A path to a custom target specification. See Custom Target Lookup + Path + + for more information. + + This may also be specified with the build.target config value + . + + Note that specifying this flag makes Cargo run in a different mode + where the target artifacts are placed in a separate directory. See + the build cache + + documentation for more details. + + -r, --release + Build optimized artifacts with the release profile. See also the + --profile option for choosing a specific profile by name. + + --profile name + Build with the given profile. See the reference + for more + details on profiles. + + --timings=fmts + Output information how long each compilation takes, and track + concurrency information over time. Accepts an optional + comma-separated list of output formats; --timings without an + argument will default to --timings=html. Specifying an output format + (rather than the default) is unstable and requires + -Zunstable-options. Valid output formats: + + o html (unstable, requires -Zunstable-options): Write a + human-readable file cargo-timing.html to the target/cargo-timings + directory with a report of the compilation. Also write a report + to the same directory with a timestamp in the filename if you + want to look at older runs. HTML output is suitable for human + consumption only, and does not provide machine-readable timing + data. + + o json (unstable, requires -Zunstable-options): Emit + machine-readable JSON information about timing information. + + Output Options + --target-dir directory + Directory for all generated artifacts and intermediate files. May + also be specified with the CARGO_TARGET_DIR environment variable, or + the build.target-dir config value + . Defaults to + target in the root of the workspace. + + --artifact-dir directory + Copy final artifacts to this directory. + + This option is unstable and available only on the nightly channel + and + requires the -Z unstable-options flag to enable. See + for more + information. + + Display Options + -v, --verbose + Use verbose output. May be specified twice for “very verbose” + output which includes extra output such as dependency warnings and + build script output. May also be specified with the term.verbose + config value + . + + -q, --quiet + Do not print cargo log messages. May also be specified with the + term.quiet config value + . + + --color when + Control when colored output is used. Valid values: + + o auto (default): Automatically detect if color support is + available on the terminal. + + o always: Always display colors. + + o never: Never display colors. + + May also be specified with the term.color config value + . + + --message-format fmt + The output format for diagnostic messages. Can be specified multiple + times and consists of comma-separated values. Valid values: + + o human (default): Display in a human-readable text format. + Conflicts with short and json. + + o short: Emit shorter, human-readable text messages. Conflicts with + human and json. + + o json: Emit JSON messages to stdout. See the reference + + for more details. Conflicts with human and short. + + o json-diagnostic-short: Ensure the rendered field of JSON messages + contains the “short” rendering from rustc. Cannot be used + with human or short. + + o json-diagnostic-rendered-ansi: Ensure the rendered field of JSON + messages contains embedded ANSI color codes for respecting + rustc’s default color scheme. Cannot be used with human or + short. + + o json-render-diagnostics: Instruct Cargo to not include rustc + diagnostics in JSON messages printed, but instead Cargo itself + should render the JSON diagnostics coming from rustc. Cargo’s + own JSON diagnostics and others coming from rustc are still + emitted. Cannot be used with human or short. + + Manifest Options + --manifest-path path + Path to the Cargo.toml file. By default, Cargo searches for the + Cargo.toml file in the current directory or any parent directory. + + --ignore-rust-version + Ignore rust-version specification in packages. + + --locked + Asserts that the exact same dependencies and versions are used as + when the existing Cargo.lock file was originally generated. Cargo + will exit with an error when either of the following scenarios + arises: + + o The lock file is missing. + + o Cargo attempted to change the lock file due to a different + dependency resolution. + + It may be used in environments where deterministic builds are + desired, such as in CI pipelines. + + --offline + Prevents Cargo from accessing the network for any reason. Without + this flag, Cargo will stop with an error if it needs to access the + network and the network is not available. With this flag, Cargo will + attempt to proceed without the network if possible. + + Beware that this may result in different dependency resolution than + online mode. Cargo will restrict itself to crates that are + downloaded locally, even if there might be a newer version as + indicated in the local copy of the index. See the cargo-fetch(1) + command to download dependencies before going offline. + + May also be specified with the net.offline config value + . + + --frozen + Equivalent to specifying both --locked and --offline. + + --lockfile-path PATH + Changes the path of the lockfile from the default + (/Cargo.lock) to PATH. PATH must end with Cargo.lock + (e.g. --lockfile-path /tmp/temporary-lockfile/Cargo.lock). Note that + providing --lockfile-path will ignore existing lockfile at the + default path, and instead will either use the lockfile from PATH, or + write a new lockfile into the provided PATH if it doesn’t exist. + This flag can be used to run most commands in read-only directories, + writing lockfile into the provided PATH. + + This option is only available on the nightly channel + and + requires the -Z unstable-options flag to enable (see #14421 + ). + + Common Options + +toolchain + If Cargo has been installed with rustup, and the first argument to + cargo begins with +, it will be interpreted as a rustup toolchain + name (such as +stable or +nightly). See the rustup documentation + for more + information about how toolchain overrides work. + + --config KEY=VALUE or PATH + Overrides a Cargo configuration value. The argument should be in + TOML syntax of KEY=VALUE, or provided as a path to an extra + configuration file. This flag may be specified multiple times. See + the command-line overrides section + + for more information. + + -C PATH + Changes the current working directory before executing any specified + operations. This affects things like where cargo looks by default + for the project manifest (Cargo.toml), as well as the directories + searched for discovering .cargo/config.toml, for example. This + option must appear before the command name, for example cargo -C + path/to/my-project build. + + This option is only available on the nightly channel + and + requires the -Z unstable-options flag to enable (see #10098 + ). + + -h, --help + Prints help information. + + -Z flag + Unstable (nightly-only) flags to Cargo. Run cargo -Z help for + details. + + Miscellaneous Options + -j N, --jobs N + Number of parallel jobs to run. May also be specified with the + build.jobs config value + . Defaults to + the number of logical CPUs. If negative, it sets the maximum number + of parallel jobs to the number of logical CPUs plus provided value. + If a string default is provided, it sets the value back to defaults. + Should not be 0. + + --keep-going + Build as many crates in the dependency graph as possible, rather + than aborting the build on the first one that fails to build. + + For example if the current package depends on dependencies fails and + works, one of which fails to build, cargo build -j1 may or may not + build the one that succeeds (depending on which one of the two + builds Cargo picked to run first), whereas cargo build -j1 + --keep-going would definitely run both builds, even if the one run + first fails. + + --future-incompat-report + Displays a future-incompat report for any future-incompatible + warnings produced during execution of this command + + See cargo-report(1) + +ENVIRONMENT + See the reference + + for details on environment variables that Cargo reads. + +EXIT STATUS + o 0: Cargo succeeded. + + o 101: Cargo failed to complete. + +EXAMPLES + 1. Build the local package and all of its dependencies: + + cargo build + + 2. Build with optimizations: + + cargo build --release + +SEE ALSO + cargo(1), cargo-rustc(1) + diff --git a/tests/testsuite/cargo_help/single_cmd_space_joined/mod.rs b/tests/testsuite/cargo_help/single_cmd_space_joined/mod.rs new file mode 100644 index 00000000000..8d008333554 --- /dev/null +++ b/tests/testsuite/cargo_help/single_cmd_space_joined/mod.rs @@ -0,0 +1,16 @@ +use crate::prelude::*; +use cargo_test_support::file; + +#[cargo_test] +fn case() { + // Should be `generate-lockfile` but typed wrong as two commands. + snapbox::cmd::Command::cargo_ui() + .env("__CARGO_TEST_FORCE_HELP_TXT", "1") + .arg("help") + .arg("generate") + .arg("lockfile") + .assert() + .code(101) + .stdout_eq(file!["stdout.term.txt"]) + .stderr_eq(file!["stderr.term.svg"]); +} diff --git a/tests/testsuite/cargo_help/single_cmd_space_joined/stderr.term.svg b/tests/testsuite/cargo_help/single_cmd_space_joined/stderr.term.svg new file mode 100644 index 00000000000..b029d9e7d4c --- /dev/null +++ b/tests/testsuite/cargo_help/single_cmd_space_joined/stderr.term.svg @@ -0,0 +1,31 @@ + + + + + + + error: no such command: `generate lockfile` + + + + help: view all installed commands with `cargo --list` + + + + + + diff --git a/tests/testsuite/cargo_help/single_cmd_space_joined/stdout.term.txt b/tests/testsuite/cargo_help/single_cmd_space_joined/stdout.term.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/testsuite/cargo_help/single_cmd_suggestion/mod.rs b/tests/testsuite/cargo_help/single_cmd_suggestion/mod.rs new file mode 100644 index 00000000000..d4e031376dc --- /dev/null +++ b/tests/testsuite/cargo_help/single_cmd_suggestion/mod.rs @@ -0,0 +1,14 @@ +use crate::prelude::*; +use cargo_test_support::file; + +#[cargo_test] +fn case() { + snapbox::cmd::Command::cargo_ui() + .env("__CARGO_TEST_FORCE_HELP_TXT", "1") + .arg("help") + .arg("built") + .assert() + .code(101) + .stdout_eq(file!["stdout.term.txt"]) + .stderr_eq(file!["stderr.term.svg"]); +} diff --git a/tests/testsuite/cargo_help/single_cmd_suggestion/stderr.term.svg b/tests/testsuite/cargo_help/single_cmd_suggestion/stderr.term.svg new file mode 100644 index 00000000000..25101261ecd --- /dev/null +++ b/tests/testsuite/cargo_help/single_cmd_suggestion/stderr.term.svg @@ -0,0 +1,37 @@ + + + + + + + error: no such command: `built` + + + + help: a command with a similar name exists: `build` + + + + help: view all installed commands with `cargo --list` + + help: find a package to install `built` with `cargo search cargo-built` + + + + + + diff --git a/tests/testsuite/cargo_help/single_cmd_suggestion/stdout.term.txt b/tests/testsuite/cargo_help/single_cmd_suggestion/stdout.term.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/testsuite/cargo_help/single_cmd_with_extra_flags/mod.rs b/tests/testsuite/cargo_help/single_cmd_with_extra_flags/mod.rs new file mode 100644 index 00000000000..8a983e3330f --- /dev/null +++ b/tests/testsuite/cargo_help/single_cmd_with_extra_flags/mod.rs @@ -0,0 +1,15 @@ +use crate::prelude::*; +use cargo_test_support::file; + +#[cargo_test] +fn case() { + snapbox::cmd::Command::cargo_ui() + .env("__CARGO_TEST_FORCE_HELP_TXT", "1") + .arg("help") + .arg("build") + .arg("--release") + .assert() + .code(1) + .stdout_eq(file!["stdout.term.txt"]) + .stderr_eq(file!["stderr.term.svg"]); +} diff --git a/tests/testsuite/cargo_help/single_cmd_with_extra_flags/stderr.term.svg b/tests/testsuite/cargo_help/single_cmd_with_extra_flags/stderr.term.svg new file mode 100644 index 00000000000..ce3c2bbf6fa --- /dev/null +++ b/tests/testsuite/cargo_help/single_cmd_with_extra_flags/stderr.term.svg @@ -0,0 +1,43 @@ + + + + + + + error: unexpected argument '--release' found + + + + tip: to pass '--release' as a value, use '-- --release' + + + + Usage: cargo[EXE] help <COMMAND>... + + + + For more information, try '--help'. + + + + + + diff --git a/tests/testsuite/cargo_help/single_cmd_with_extra_flags/stdout.term.txt b/tests/testsuite/cargo_help/single_cmd_with_extra_flags/stdout.term.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/tests/testsuite/cargo_report_future_incompat/help/mod.rs b/tests/testsuite/cargo_report_future_incompat/help/mod.rs new file mode 100644 index 00000000000..d0667ab4098 --- /dev/null +++ b/tests/testsuite/cargo_report_future_incompat/help/mod.rs @@ -0,0 +1,14 @@ +use crate::prelude::*; +use cargo_test_support::file; +use cargo_test_support::str; + +#[cargo_test] +fn case() { + snapbox::cmd::Command::cargo_ui() + .args(["report", "future-incompat"]) + .arg("--help") + .assert() + .success() + .stdout_eq(file!["stdout.term.svg"]) + .stderr_eq(str![""]); +} diff --git a/tests/testsuite/cargo_report_future_incompat/help/stdout.term.svg b/tests/testsuite/cargo_report_future_incompat/help/stdout.term.svg new file mode 100644 index 00000000000..c15006871d0 --- /dev/null +++ b/tests/testsuite/cargo_report_future_incompat/help/stdout.term.svg @@ -0,0 +1,73 @@ + + + + + + + Reports any crates which will eventually stop compiling + + + + Usage: cargo[EXE] report future-incompatibilities [OPTIONS] + + + + Options: + + --id <id> identifier of the report generated by a Cargo command invocation + + -v, --verbose... Use verbose output (-vv very verbose/build.rs output) + + -q, --quiet Do not print cargo log messages + + --color <WHEN> Coloring [possible values: auto, always, never] + + --config <KEY=VALUE|PATH> Override a configuration value + + -Z <FLAG> Unstable (nightly-only) flags to Cargo, see 'cargo -Z help' for + + details + + -h, --help Print help + + + + Package Selection: + + -p, --package [<SPEC>] Package to display a report for + + + + Manifest Options: + + --locked Assert that `Cargo.lock` will remain unchanged + + --offline Run without accessing the network + + --frozen Equivalent to specifying both --locked and --offline + + + + Run `cargo help report future-incompatibilities` for more detailed information. + + + + + + diff --git a/tests/testsuite/cargo_report_future_incompat/mod.rs b/tests/testsuite/cargo_report_future_incompat/mod.rs new file mode 100644 index 00000000000..c0ce1118071 --- /dev/null +++ b/tests/testsuite/cargo_report_future_incompat/mod.rs @@ -0,0 +1 @@ +mod help; diff --git a/tests/testsuite/main.rs b/tests/testsuite/main.rs index ff63c642b5d..16971afb716 100644 --- a/tests/testsuite/main.rs +++ b/tests/testsuite/main.rs @@ -52,6 +52,7 @@ mod cargo_publish; mod cargo_read_manifest; mod cargo_remove; mod cargo_report; +mod cargo_report_future_incompat; mod cargo_report_rebuilds; mod cargo_report_sessions; mod cargo_report_timings;