mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-01 06:51:58 +00:00
Fix panic on x build --help --verbose
This also makes the panic message a little more informative in case it happens again.
This commit is contained in:
parent
88c58e3c2c
commit
3890992d0a
@ -351,7 +351,17 @@ 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| -> ! {
|
||||
let config = Config::parse(&["setup".to_string()]);
|
||||
// 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);
|
||||
|
||||
|
@ -1400,7 +1400,10 @@ impl Build {
|
||||
let mut list = vec![INTERNER.intern_str(root)];
|
||||
let mut visited = HashSet::new();
|
||||
while let Some(krate) = list.pop() {
|
||||
let krate = &self.crates[&krate];
|
||||
let krate = self
|
||||
.crates
|
||||
.get(&krate)
|
||||
.unwrap_or_else(|| panic!("metadata missing for {krate}: {:?}", self.crates));
|
||||
ret.push(krate);
|
||||
for dep in &krate.deps {
|
||||
if !self.crates.contains_key(dep) {
|
||||
|
Loading…
Reference in New Issue
Block a user