Unnamed repository; edit this file 'description' to name the repository.
Auto merge of #18009 - Veykril:reformat-no-rustup, r=Veykril
fix: do not assume rustup is installed in xtask codegen take 2 7d9e4fcc07e5de94e37b73436147cdbbaa35dbdc broke this on rustup toolchains, the `cmd` command is trying to be too smart here
bors 2024-08-30
parent 1cb4266 · parent 3ad54a7 · commit 64c538f
-rw-r--r--xtask/src/codegen.rs48
1 files changed, 26 insertions, 22 deletions
diff --git a/xtask/src/codegen.rs b/xtask/src/codegen.rs
index 09bfed19b0..4c7b07c5e0 100644
--- a/xtask/src/codegen.rs
+++ b/xtask/src/codegen.rs
@@ -126,31 +126,35 @@ impl fmt::Display for Location {
}
}
-fn rustfmt_executable(sh: &Shell) -> &str {
- // First try explicitly requesting the stable channel via rustup in case nightly is being used by default,
- // then plain rustfmt in case rustup isn't being used to manage the compiler (e.g. when using Nix).
- for executable in ["rustup run stable rustfmt", "rustfmt"] {
- let version = cmd!(sh, "{executable} --version").read().unwrap_or_default();
- if version.contains("stable") {
- return executable;
- }
- }
-
- panic!(
- "Failed to run rustfmt from toolchain 'stable'. \
- Please run `rustup component add rustfmt --toolchain stable` to install it.",
- );
-}
-
fn reformat(text: String) -> String {
let sh = Shell::new().unwrap();
- let rustfmt_exe = rustfmt_executable(&sh);
let rustfmt_toml = project_root().join("rustfmt.toml");
- let mut stdout =
- cmd!(sh, "{rustfmt_exe} --config-path {rustfmt_toml} --config fn_single_line=true")
- .stdin(text)
- .read()
- .unwrap();
+ let version = cmd!(sh, "rustup run stable rustfmt --version").read().unwrap_or_default();
+
+ // First try explicitly requesting the stable channel via rustup in case nightly is being used by default,
+ // then plain rustfmt in case rustup isn't being used to manage the compiler (e.g. when using Nix).
+ let mut stdout = if !version.contains("stable") {
+ let version = cmd!(sh, "rustfmt --version").read().unwrap_or_default();
+ if !version.contains("stable") {
+ panic!(
+ "Failed to run rustfmt from toolchain 'stable'. \
+ Please run `rustup component add rustfmt --toolchain stable` to install it.",
+ );
+ } else {
+ cmd!(sh, "rustfmt --config-path {rustfmt_toml} --config fn_single_line=true")
+ .stdin(text)
+ .read()
+ .unwrap()
+ }
+ } else {
+ cmd!(
+ sh,
+ "rustup run stable rustfmt --config-path {rustfmt_toml} --config fn_single_line=true"
+ )
+ .stdin(text)
+ .read()
+ .unwrap()
+ };
if !stdout.ends_with('\n') {
stdout.push('\n');
}