Rollup merge of #97411 - raiyansayeed:print-stderr-consistently, r=Mark-Simulacrum
Print stderr consistently Solves https://github.com/rust-lang/rust/issues/96712 I tried to follow what I perceived as the general consensus for error messages in boostrap i.e messages that were .. * resulting from an Err(...) => * literally called as "Error: ...." * by the end of the block scope forced to run a panic! or process::exit with a guaranteed non-zero error code.
This commit is contained in:
commit
1174dba02f
9 changed files with 38 additions and 38 deletions
|
@ -227,7 +227,7 @@ impl StepDescription {
|
|||
|
||||
fn is_excluded(&self, builder: &Builder<'_>, pathset: &PathSet) -> bool {
|
||||
if builder.config.exclude.iter().any(|e| pathset.has(&e.path, e.kind)) {
|
||||
eprintln!("Skipping {:?} because it is excluded", pathset);
|
||||
println!("Skipping {:?} because it is excluded", pathset);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -765,7 +765,7 @@ impl Config {
|
|||
{
|
||||
Ok(table) => table,
|
||||
Err(err) => {
|
||||
println!("failed to parse TOML configuration '{}': {}", file.display(), err);
|
||||
eprintln!("failed to parse TOML configuration '{}': {}", file.display(), err);
|
||||
process::exit(2);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -367,8 +367,8 @@ To learn more about a subcommand, run `./x.py <subcommand> -h`",
|
|||
}
|
||||
}
|
||||
if !pass_sanity_check {
|
||||
println!("{}\n", subcommand_help);
|
||||
println!(
|
||||
eprintln!("{}\n", subcommand_help);
|
||||
eprintln!(
|
||||
"Sorry, I couldn't figure out which subcommand you were trying to specify.\n\
|
||||
You may need to move some options to after the subcommand.\n"
|
||||
);
|
||||
|
@ -532,7 +532,7 @@ Arguments:
|
|||
Kind::Build => Subcommand::Build { paths },
|
||||
Kind::Check => {
|
||||
if matches.opt_present("all-targets") {
|
||||
eprintln!(
|
||||
println!(
|
||||
"Warning: --all-targets is now on by default and does not need to be passed explicitly."
|
||||
);
|
||||
}
|
||||
|
@ -606,7 +606,7 @@ Arguments:
|
|||
if matches.opt_str("keep-stage").is_some()
|
||||
|| matches.opt_str("keep-stage-std").is_some()
|
||||
{
|
||||
println!("--keep-stage not yet supported for x.py check");
|
||||
eprintln!("--keep-stage not yet supported for x.py check");
|
||||
process::exit(1);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -96,7 +96,7 @@ pub fn format(build: &Build, check: bool, paths: &[PathBuf]) {
|
|||
entry.split(' ').nth(1).expect("every git status entry should list a path")
|
||||
});
|
||||
for untracked_path in untracked_paths {
|
||||
eprintln!("skip untracked path {} during rustfmt invocations", untracked_path);
|
||||
println!("skip untracked path {} during rustfmt invocations", untracked_path);
|
||||
// The leading `/` makes it an exact match against the
|
||||
// repository root, rather than a glob. Without that, if you
|
||||
// have `foo.rs` in the repository root it will also match
|
||||
|
@ -105,10 +105,10 @@ pub fn format(build: &Build, check: bool, paths: &[PathBuf]) {
|
|||
ignore_fmt.add(&format!("!/{}", untracked_path)).expect(&untracked_path);
|
||||
}
|
||||
} else {
|
||||
eprintln!("Not in git tree. Skipping git-aware format checks");
|
||||
println!("Not in git tree. Skipping git-aware format checks");
|
||||
}
|
||||
} else {
|
||||
eprintln!("Could not find usable git. Skipping git-aware format checks");
|
||||
println!("Could not find usable git. Skipping git-aware format checks");
|
||||
}
|
||||
let ignore_fmt = ignore_fmt.build().unwrap();
|
||||
|
||||
|
|
|
@ -689,9 +689,9 @@ impl Build {
|
|||
// Check for postponed failures from `test --no-fail-fast`.
|
||||
let failures = self.delayed_failures.borrow();
|
||||
if failures.len() > 0 {
|
||||
println!("\n{} command(s) did not execute successfully:\n", failures.len());
|
||||
eprintln!("\n{} command(s) did not execute successfully:\n", failures.len());
|
||||
for failure in failures.iter() {
|
||||
println!(" - {}\n", failure);
|
||||
eprintln!(" - {}\n", failure);
|
||||
}
|
||||
process::exit(1);
|
||||
}
|
||||
|
|
|
@ -138,10 +138,10 @@ pub(crate) fn maybe_download_ci_llvm(builder: &Builder<'_>) {
|
|||
let llvm_sha = llvm_sha.trim();
|
||||
|
||||
if llvm_sha == "" {
|
||||
println!("error: could not find commit hash for downloading LLVM");
|
||||
println!("help: maybe your repository history is too shallow?");
|
||||
println!("help: consider disabling `download-ci-llvm`");
|
||||
println!("help: or fetch enough history to include one upstream commit");
|
||||
eprintln!("error: could not find commit hash for downloading LLVM");
|
||||
eprintln!("help: maybe your repository history is too shallow?");
|
||||
eprintln!("help: consider disabling `download-ci-llvm`");
|
||||
eprintln!("help: or fetch enough history to include one upstream commit");
|
||||
panic!();
|
||||
}
|
||||
|
||||
|
|
|
@ -85,12 +85,12 @@ pub fn setup(config: &Config, profile: Profile) {
|
|||
let path = &config.config;
|
||||
|
||||
if path.exists() {
|
||||
println!(
|
||||
eprintln!(
|
||||
"error: you asked `x.py` to setup a new config file, but one already exists at `{}`",
|
||||
path.display()
|
||||
);
|
||||
println!("help: try adding `profile = \"{}\"` at the top of {}", profile, path.display());
|
||||
println!(
|
||||
eprintln!("help: try adding `profile = \"{}\"` at the top of {}", profile, path.display());
|
||||
eprintln!(
|
||||
"note: this will use the configuration in {}",
|
||||
profile.include_path(&config.src).display()
|
||||
);
|
||||
|
@ -115,7 +115,7 @@ pub fn setup(config: &Config, profile: Profile) {
|
|||
println!();
|
||||
|
||||
if !rustup_installed() && profile != Profile::User {
|
||||
println!("`rustup` is not installed; cannot link `stage1` toolchain");
|
||||
eprintln!("`rustup` is not installed; cannot link `stage1` toolchain");
|
||||
} else if stage_dir_exists(&stage_path[..]) {
|
||||
attempt_toolchain_link(&stage_path[..]);
|
||||
}
|
||||
|
@ -173,7 +173,7 @@ fn attempt_toolchain_link(stage_path: &str) {
|
|||
}
|
||||
|
||||
if !ensure_stage1_toolchain_placeholder_exists(stage_path) {
|
||||
println!(
|
||||
eprintln!(
|
||||
"Failed to create a template for stage 1 toolchain or confirm that it already exists"
|
||||
);
|
||||
return;
|
||||
|
@ -184,8 +184,8 @@ fn attempt_toolchain_link(stage_path: &str) {
|
|||
"Added `stage1` rustup toolchain; try `cargo +stage1 build` on a separate rust project to run a newly-built toolchain"
|
||||
);
|
||||
} else {
|
||||
println!("`rustup` failed to link stage 1 build to `stage1` toolchain");
|
||||
println!(
|
||||
eprintln!("`rustup` failed to link stage 1 build to `stage1` toolchain");
|
||||
eprintln!(
|
||||
"To manually link stage 1 build to `stage1` toolchain, run:\n
|
||||
`rustup toolchain link stage1 {}`",
|
||||
&stage_path
|
||||
|
@ -292,8 +292,8 @@ pub fn interactive_path() -> io::Result<Profile> {
|
|||
break match parse_with_abbrev(&input) {
|
||||
Ok(profile) => profile,
|
||||
Err(err) => {
|
||||
println!("error: {}", err);
|
||||
println!("note: press Ctrl+C to exit");
|
||||
eprintln!("error: {}", err);
|
||||
eprintln!("note: press Ctrl+C to exit");
|
||||
continue;
|
||||
}
|
||||
};
|
||||
|
@ -320,8 +320,8 @@ undesirable, simply delete the `pre-push` file from .git/hooks."
|
|||
"y" | "yes" => true,
|
||||
"n" | "no" | "" => false,
|
||||
_ => {
|
||||
println!("error: unrecognized option '{}'", input.trim());
|
||||
println!("note: press Ctrl+C to exit");
|
||||
eprintln!("error: unrecognized option '{}'", input.trim());
|
||||
eprintln!("note: press Ctrl+C to exit");
|
||||
continue;
|
||||
}
|
||||
};
|
||||
|
@ -337,7 +337,7 @@ undesirable, simply delete the `pre-push` file from .git/hooks."
|
|||
));
|
||||
let dst = git.join("hooks").join("pre-push");
|
||||
match fs::hard_link(src, &dst) {
|
||||
Err(e) => println!(
|
||||
Err(e) => eprintln!(
|
||||
"error: could not create hook {}: do you already have the git hook installed?\n{}",
|
||||
dst.display(),
|
||||
e
|
||||
|
|
|
@ -152,43 +152,43 @@ impl Step for ToolBuild {
|
|||
});
|
||||
|
||||
if is_expected && !duplicates.is_empty() {
|
||||
println!(
|
||||
eprintln!(
|
||||
"duplicate artifacts found when compiling a tool, this \
|
||||
typically means that something was recompiled because \
|
||||
a transitive dependency has different features activated \
|
||||
than in a previous build:\n"
|
||||
);
|
||||
println!(
|
||||
eprintln!(
|
||||
"the following dependencies are duplicated although they \
|
||||
have the same features enabled:"
|
||||
);
|
||||
let (same, different): (Vec<_>, Vec<_>) =
|
||||
duplicates.into_iter().partition(|(_, cur, prev)| cur.2 == prev.2);
|
||||
for (id, cur, prev) in same {
|
||||
println!(" {}", id);
|
||||
eprintln!(" {}", id);
|
||||
// same features
|
||||
println!(" `{}` ({:?})\n `{}` ({:?})", cur.0, cur.1, prev.0, prev.1);
|
||||
eprintln!(" `{}` ({:?})\n `{}` ({:?})", cur.0, cur.1, prev.0, prev.1);
|
||||
}
|
||||
println!("the following dependencies have different features:");
|
||||
eprintln!("the following dependencies have different features:");
|
||||
for (id, cur, prev) in different {
|
||||
println!(" {}", id);
|
||||
eprintln!(" {}", id);
|
||||
let cur_features: HashSet<_> = cur.2.into_iter().collect();
|
||||
let prev_features: HashSet<_> = prev.2.into_iter().collect();
|
||||
println!(
|
||||
eprintln!(
|
||||
" `{}` additionally enabled features {:?} at {:?}",
|
||||
cur.0,
|
||||
&cur_features - &prev_features,
|
||||
cur.1
|
||||
);
|
||||
println!(
|
||||
eprintln!(
|
||||
" `{}` additionally enabled features {:?} at {:?}",
|
||||
prev.0,
|
||||
&prev_features - &cur_features,
|
||||
prev.1
|
||||
);
|
||||
}
|
||||
println!();
|
||||
println!(
|
||||
eprintln!();
|
||||
eprintln!(
|
||||
"to fix this you will probably want to edit the local \
|
||||
src/tools/rustc-workspace-hack/Cargo.toml crate, as \
|
||||
that will update the dependency graph to ensure that \
|
||||
|
|
|
@ -455,7 +455,7 @@ fn dir_up_to_date(src: &Path, threshold: SystemTime) -> bool {
|
|||
}
|
||||
|
||||
fn fail(s: &str) -> ! {
|
||||
println!("\n\n{}\n\n", s);
|
||||
eprintln!("\n\n{}\n\n", s);
|
||||
std::process::exit(1);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue