Skip to content

Commit

Permalink
Rollup merge of rust-lang#106314 - jyn514:fix-panic, r=jyn514
Browse files Browse the repository at this point in the history
Fix panic on `x build --help`

Fixes rust-lang#106313. This avoids trying to run `get_help` unless we actually need to see the paths that are available for the subcommand.

This originally regressed in rust-lang#106166.
  • Loading branch information
jyn514 authored Dec 31, 2022
2 parents 88470f3 + 6d2fe52 commit b58e611
Showing 1 changed file with 22 additions and 22 deletions.
44 changes: 22 additions & 22 deletions src/bootstrap/flags.rs
Original file line number Diff line number Diff line change
Expand Up @@ -352,32 +352,32 @@ To learn more about a subcommand, run `./x.py <subcommand> -h`",

// fn usage()
let usage = |exit_code: i32, opts: &Options, verbose: bool, subcommand_help: &str| -> ! {
// We have an unfortunate situation here: some Steps use `builder.in_tree_crates` to determine their paths.
// To determine those crates, we need to run `cargo metadata`, which means we need all submodules to be checked out.
// That takes a while to run, so only do it when paths were explicitly requested, not on all CLI errors.
// `Build::new` won't load submodules for the `setup` command.
let cmd = if verbose {
println!("note: updating submodules before printing available paths");
"build"
} else {
"setup"
};
let config = Config::parse(&[cmd.to_string()]);
let build = Build::new(config);
let paths = Builder::get_help(&build, subcommand);

println!("{}", opts.usage(subcommand_help));
if let Some(s) = paths {
if verbose {
if verbose {
// We have an unfortunate situation here: some Steps use `builder.in_tree_crates` to determine their paths.
// To determine those crates, we need to run `cargo metadata`, which means we need all submodules to be checked out.
// That takes a while to run, so only do it when paths were explicitly requested, not on all CLI errors.
// `Build::new` won't load submodules for the `setup` command.
let cmd = if verbose {
println!("note: updating submodules before printing available paths");
"build"
} else {
"setup"
};
let config = Config::parse(&[cmd.to_string()]);
let build = Build::new(config);
let paths = Builder::get_help(&build, subcommand);

if let Some(s) = paths {
println!("{}", s);
} else {
println!(
"Run `./x.py {} -h -v` to see a list of available paths.",
subcommand.as_str()
);
panic!("No paths available for subcommand `{}`", subcommand.as_str());
}
} else if verbose {
panic!("No paths available for subcommand `{}`", subcommand.as_str());
} else {
println!(
"Run `./x.py {} -h -v` to see a list of available paths.",
subcommand.as_str()
);
}
crate::detail_exit(exit_code);
};
Expand Down

0 comments on commit b58e611

Please sign in to comment.