Skip to content

Commit 843d709

Browse files
committed
Refactor change detection for rustdoc and download-rustc
1 parent 814df6e commit 843d709

File tree

2 files changed

+20
-15
lines changed

2 files changed

+20
-15
lines changed

src/bootstrap/src/core/build_steps/tool.rs

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use crate::core::builder::{Builder, Cargo as CargoCommand, RunConfig, ShouldRun,
1010
use crate::core::config::TargetSelection;
1111
use crate::utils::channel::GitInfo;
1212
use crate::utils::exec::{BootstrapCommand, command};
13-
use crate::utils::helpers::{add_dylib_path, exe, git, t};
13+
use crate::utils::helpers::{add_dylib_path, exe, t};
1414
use crate::{Compiler, Kind, Mode, gha};
1515

1616
#[derive(Debug, Clone, Hash, PartialEq, Eq)]
@@ -603,20 +603,11 @@ impl Step for Rustdoc {
603603
)
604604
.unwrap();
605605

606-
let librustdoc_src = builder.config.src.join("src/librustdoc");
607-
let rustdoc_src = builder.config.src.join("src/tools/rustdoc");
608-
609-
// FIXME: The change detection logic here is quite similar to `Config::download_ci_rustc_commit`.
610-
// It would be better to unify them.
611-
let has_changes = !git(Some(&builder.config.src))
612-
.allow_failure()
613-
.run_always()
614-
.args(["diff-index", "--quiet", &commit])
615-
.arg("--")
616-
.arg(librustdoc_src)
617-
.arg(rustdoc_src)
618-
.run(builder);
619-
606+
let dirs = vec![
607+
builder.config.src.join("src/librustdoc"),
608+
builder.config.src.join("src/tools/rustdoc"),
609+
];
610+
let has_changes = builder.config.check_for_changes(&dirs, &commit);
620611
if !has_changes {
621612
let precompiled_rustdoc = builder
622613
.config

src/bootstrap/src/core/config/config.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2909,6 +2909,20 @@ impl Config {
29092909

29102910
Some(commit.to_string())
29112911
}
2912+
2913+
/// Check for changes in specified directories since a given commit.
2914+
/// Returns true if changes exist, false if no changes
2915+
pub fn check_for_changes(&self, dirs: &[PathBuf], commit: &str) -> bool {
2916+
let mut git = helpers::git(Some(&self.src));
2917+
git.args(["diff-index", "--quiet", commit]);
2918+
if !dirs.is_empty() {
2919+
git.arg("--");
2920+
for dir in dirs {
2921+
git.arg(dir);
2922+
}
2923+
}
2924+
!t!(git.as_command_mut().status()).success()
2925+
}
29122926
}
29132927

29142928
/// Compares the current `Llvm` options against those in the CI LLVM builder and detects any incompatible options.

0 commit comments

Comments
 (0)