Auto merge of #11473 - hi-rustin:rustin-patch-help, r=epage

Show `--help` if there is no man page for subcommand
This commit is contained in:
bors 2022-12-19 14:08:39 +00:00
commit 6ab160b8f6
3 changed files with 29 additions and 7 deletions

View File

@ -4,7 +4,6 @@ use cargo::ops::cargo_config;
pub fn cli() -> Command {
subcommand("config")
.about("Inspect configuration values")
.after_help("Run `cargo help config` for more detailed information.\n")
.subcommand_required(true)
.arg_required_else_help(true)
.subcommand(

View File

@ -22,11 +22,21 @@ pub fn exec(config: &mut Config, args: &ArgMatches) -> CliResult {
let subcommand = args.get_one::<String>("COMMAND");
if let Some(subcommand) = subcommand {
if !try_help(config, subcommand)? {
crate::execute_external_subcommand(
config,
subcommand,
&[OsStr::new(subcommand), OsStr::new("--help")],
)?;
match check_builtin(&subcommand) {
Some(s) => {
crate::execute_internal_subcommand(
config,
&[OsStr::new(s), OsStr::new("--help")],
)?;
}
None => {
crate::execute_external_subcommand(
config,
subcommand,
&[OsStr::new(subcommand), OsStr::new("--help")],
)?;
}
}
}
} else {
let mut cmd = crate::cli::cli();

View File

@ -189,9 +189,22 @@ fn execute_external_subcommand(config: &Config, cmd: &str, args: &[&OsStr]) -> C
return Err(CliError::new(err, 101));
}
};
execute_subcommand(config, Some(&command), args)
}
fn execute_internal_subcommand(config: &Config, args: &[&OsStr]) -> CliResult {
execute_subcommand(config, None, args)
}
// This function is used to execute a subcommand. It is used to execute both
// internal and external subcommands.
// If `cmd_path` is `None`, then the subcommand is an internal subcommand.
fn execute_subcommand(config: &Config, cmd_path: Option<&PathBuf>, args: &[&OsStr]) -> CliResult {
let cargo_exe = config.cargo_exe()?;
let mut cmd = ProcessBuilder::new(&command);
let mut cmd = match cmd_path {
Some(cmd_path) => ProcessBuilder::new(cmd_path),
None => ProcessBuilder::new(&cargo_exe),
};
cmd.env(cargo::CARGO_ENV, cargo_exe).args(args);
if let Some(client) = config.jobserver_from_env() {
cmd.inherit_jobserver(client);