Skip to content

Commit

Permalink
Unrolled build for rust-lang#123889
Browse files Browse the repository at this point in the history
Rollup merge of rust-lang#123889 - onur-ozkan:improve-tidy, r=Mark-Simulacrum

reduce tidy overheads in run-make checks

This change makes tidy to handle run-make checks with a single iteration, avoiding the need for multiple iterations and copying.
  • Loading branch information
rust-timer authored Apr 14, 2024
2 parents a3269e9 + c6002f1 commit 5878919
Showing 1 changed file with 24 additions and 9 deletions.
33 changes: 24 additions & 9 deletions src/tools/tidy/src/run_make_tests.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,26 @@ use std::io::Write;
use std::path::{Path, PathBuf};

pub fn check(tests_path: &Path, src_path: &Path, bless: bool, bad: &mut bool) {
let mut is_sorted = true;

let allowed_makefiles = {
let allowed_makefiles = include_str!("allowed_run_make_makefiles.txt");
let allowed_makefiles = allowed_makefiles.lines().collect::<Vec<_>>();
let is_sorted = allowed_makefiles.windows(2).all(|w| w[0] < w[1]);
let mut total_lines = 0;
let mut prev_line = "";
let allowed_makefiles: BTreeSet<&str> = include_str!("allowed_run_make_makefiles.txt")
.lines()
.map(|line| {
total_lines += 1;

if prev_line > line {
is_sorted = false;
}

prev_line = line;

line
})
.collect();

if !is_sorted && !bless {
tidy_error!(
bad,
Expand All @@ -18,17 +34,16 @@ pub fn check(tests_path: &Path, src_path: &Path, bless: bool, bad: &mut bool) {
`x test tidy --bless`"
);
}
let allowed_makefiles_unique =
allowed_makefiles.iter().map(ToString::to_string).collect::<BTreeSet<String>>();
if allowed_makefiles_unique.len() != allowed_makefiles.len() {
if allowed_makefiles.len() != total_lines {
tidy_error!(
bad,
"`src/tools/tidy/src/allowed_run_make_makefiles.txt` contains duplicate entries, \
likely because you modified it manually, please only update it with command \
`x test tidy --bless`"
);
}
allowed_makefiles_unique

allowed_makefiles
};

let mut remaining_makefiles = allowed_makefiles.clone();
Expand All @@ -48,7 +63,7 @@ pub fn check(tests_path: &Path, src_path: &Path, bless: bool, bad: &mut bool) {
let makefile_path = entry.path().strip_prefix(&tests_path).unwrap();
let makefile_path = makefile_path.to_str().unwrap().replace('\\', "/");

if !remaining_makefiles.remove(&makefile_path) {
if !remaining_makefiles.remove(makefile_path.as_str()) {
tidy_error!(
bad,
"found run-make Makefile not permitted in \
Expand All @@ -64,7 +79,7 @@ pub fn check(tests_path: &Path, src_path: &Path, bless: bool, bad: &mut bool) {
// Our data must remain up to date, so they must be removed from
// `src/tools/tidy/src/allowed_run_make_makefiles.txt`.
// This can be done automatically on --bless, or else a tidy error will be issued.
if bless && !remaining_makefiles.is_empty() {
if bless && (!remaining_makefiles.is_empty() || !is_sorted) {
let tidy_src = src_path.join("tools").join("tidy").join("src");
let org_file_path = tidy_src.join("allowed_run_make_makefiles.txt");
let temp_file_path = tidy_src.join("blessed_allowed_run_make_makefiles.txt");
Expand Down

0 comments on commit 5878919

Please sign in to comment.