about summary refs log tree commit diff
diff options
context:
space:
mode:
authorYuki Okushi <jtitor@2k36.org>2021-05-11 09:28:04 +0900
committerGitHub <noreply@github.com>2021-05-11 09:28:04 +0900
commit7e827e936bbf0bcbe071fc6e506f23014dbe71bd (patch)
tree3c1ad0a589fd50bf1478612eb608703cf6958cc4
parent5fc898782c3a5290ac1f8b8be025b0a73f33186e (diff)
parentdadcb0550d41c343988310ee1946d8dd8f477008 (diff)
downloadrust-7e827e936bbf0bcbe071fc6e506f23014dbe71bd.tar.gz
rust-7e827e936bbf0bcbe071fc6e506f23014dbe71bd.zip
Rollup merge of #84783 - jyn514:fmt-one, r=Mark-Simulacrum
Allow formatting specific subdirectories

Fixes https://github.com/rust-lang/rust/issues/71094.
-rw-r--r--src/bootstrap/flags.rs3
-rw-r--r--src/bootstrap/format.rs17
-rw-r--r--src/bootstrap/lib.rs4
-rw-r--r--src/bootstrap/test.rs2
4 files changed, 19 insertions, 7 deletions
diff --git a/src/bootstrap/flags.rs b/src/bootstrap/flags.rs
index d961e067db3..80a60c79edf 100644
--- a/src/bootstrap/flags.rs
+++ b/src/bootstrap/flags.rs
@@ -91,6 +91,7 @@ pub enum Subcommand {
         paths: Vec<PathBuf>,
     },
     Format {
+        paths: Vec<PathBuf>,
         check: bool,
     },
     Doc {
@@ -581,7 +582,7 @@ Arguments:
 
                 Subcommand::Clean { all: matches.opt_present("all") }
             }
-            "fmt" => Subcommand::Format { check: matches.opt_present("check") },
+            "fmt" => Subcommand::Format { check: matches.opt_present("check"), paths },
             "dist" => Subcommand::Dist { paths },
             "install" => Subcommand::Install { paths },
             "run" | "r" => {
diff --git a/src/bootstrap/format.rs b/src/bootstrap/format.rs
index d21e3408144..2408344487b 100644
--- a/src/bootstrap/format.rs
+++ b/src/bootstrap/format.rs
@@ -42,7 +42,7 @@ struct RustfmtConfig {
     ignore: Vec<String>,
 }
 
-pub fn format(build: &Build, check: bool) {
+pub fn format(build: &Build, check: bool, paths: &[PathBuf]) {
     if build.config.dry_run {
         return;
     }
@@ -118,8 +118,19 @@ pub fn format(build: &Build, check: bool) {
         .to_path_buf();
     let src = build.src.clone();
     let (tx, rx): (SyncSender<PathBuf>, _) = std::sync::mpsc::sync_channel(128);
-    let walker =
-        WalkBuilder::new(src.clone()).types(matcher).overrides(ignore_fmt).build_parallel();
+    let walker = match paths.get(0) {
+        Some(first) => {
+            let mut walker = WalkBuilder::new(first);
+            for path in &paths[1..] {
+                walker.add(path);
+            }
+            walker
+        }
+        None => WalkBuilder::new(src.clone()),
+    }
+    .types(matcher)
+    .overrides(ignore_fmt)
+    .build_parallel();
 
     // there is a lot of blocking involved in spawning a child process and reading files to format.
     // spawn more processes than available concurrency to keep the CPU busy
diff --git a/src/bootstrap/lib.rs b/src/bootstrap/lib.rs
index 24da44b933a..2960dd3df6b 100644
--- a/src/bootstrap/lib.rs
+++ b/src/bootstrap/lib.rs
@@ -478,8 +478,8 @@ impl Build {
             job::setup(self);
         }
 
-        if let Subcommand::Format { check } = self.config.cmd {
-            return format::format(self, check);
+        if let Subcommand::Format { check, paths } = &self.config.cmd {
+            return format::format(self, *check, &paths);
         }
 
         if let Subcommand::Clean { all } = self.config.cmd {
diff --git a/src/bootstrap/test.rs b/src/bootstrap/test.rs
index df467bebe74..78163651158 100644
--- a/src/bootstrap/test.rs
+++ b/src/bootstrap/test.rs
@@ -889,7 +889,7 @@ help: to skip test's attempt to check tidiness, pass `--exclude src/tools/tidy`
                 );
                 std::process::exit(1);
             }
-            crate::format::format(&builder.build, !builder.config.cmd.bless());
+            crate::format::format(&builder.build, !builder.config.cmd.bless(), &[]);
         }
     }