]> git.lizzy.rs Git - rust.git/blobdiff - src/bootstrap/format.rs
Rollup merge of #68279 - GuillaumeGomez:clean-up-e0198, r=Dylan-DPC
[rust.git] / src / bootstrap / format.rs
index c8ae2f4e6888c6065f950c2a3f637cb635d5fe03..6e5e3fe07e7467065abd36bbef79a49863ce1c33 100644 (file)
@@ -1,21 +1,17 @@
 //! Runs rustfmt on the repository.
 
 use crate::Build;
-use std::process::Command;
+use build_helper::t;
 use ignore::WalkBuilder;
 use std::path::Path;
-use build_helper::t;
-
-fn rustfmt(build: &Build, path: &Path, check: bool) {
-    let rustfmt_path = build.config.initial_rustfmt.as_ref().unwrap_or_else(|| {
-        eprintln!("./x.py fmt is not supported on this channel");
-        std::process::exit(1);
-    });
+use std::process::Command;
 
-    let mut cmd = Command::new(&rustfmt_path);
+fn rustfmt(src: &Path, rustfmt: &Path, path: &Path, check: bool) {
+    let mut cmd = Command::new(&rustfmt);
     // avoid the submodule config paths from coming into play,
     // we only allow a single global config for the workspace for now
-    cmd.arg("--config-path").arg(&build.src.canonicalize().unwrap());
+    cmd.arg("--config-path").arg(&src.canonicalize().unwrap());
+    cmd.arg("--edition").arg("2018");
     cmd.arg("--unstable-features");
     cmd.arg("--skip-children");
     if check {
@@ -24,7 +20,15 @@ fn rustfmt(build: &Build, path: &Path, check: bool) {
     cmd.arg(&path);
     let cmd_debug = format!("{:?}", cmd);
     let status = cmd.status().expect("executing rustfmt");
-    assert!(status.success(), "running {} successful", cmd_debug);
+    if !status.success() {
+        eprintln!(
+            "Running `{}` failed.\nIf you're running `tidy`, \
+            try again with `--bless` flag. Or, you just want to format \
+            code, run `./x.py fmt` instead.",
+            cmd_debug,
+        );
+        std::process::exit(1);
+    }
 }
 
 #[derive(serde::Deserialize)]
@@ -51,14 +55,21 @@ pub fn format(build: &Build, check: bool) {
     }
     let ignore_fmt = ignore_fmt.build().unwrap();
 
-    let walker = WalkBuilder::new(&build.src)
-        .types(matcher)
-        .overrides(ignore_fmt)
-        .build();
-    for entry in walker {
-        let entry = t!(entry);
-        if entry.file_type().map_or(false, |t| t.is_file()) {
-            rustfmt(build, &entry.path(), check);
-        }
-    }
+    let rustfmt_path = build.config.initial_rustfmt.as_ref().unwrap_or_else(|| {
+        eprintln!("./x.py fmt is not supported on this channel");
+        std::process::exit(1);
+    });
+    let src = build.src.clone();
+    let walker = WalkBuilder::new(&build.src).types(matcher).overrides(ignore_fmt).build_parallel();
+    walker.run(|| {
+        let src = src.clone();
+        let rustfmt_path = rustfmt_path.clone();
+        Box::new(move |entry| {
+            let entry = t!(entry);
+            if entry.file_type().map_or(false, |t| t.is_file()) {
+                rustfmt(&src, &rustfmt_path, &entry.path(), check);
+            }
+            ignore::WalkState::Continue
+        })
+    });
 }