Skip to content

Commit

Permalink
Rollup merge of rust-lang#122026 - clubby789:fmt-removed, r=onur-ozkan
Browse files Browse the repository at this point in the history
Do not try to format removed files

If you removed a file, `x fmt` would confusingly print
```
formatting modified file path/to/file.rs
```
and pass it to the formatting logic. Filter out files with `D` (removed) status
  • Loading branch information
matthiaskrgr committed Mar 6, 2024
2 parents c9af431 + 39887d3 commit af88518
Show file tree
Hide file tree
Showing 2 changed files with 13 additions and 6 deletions.
2 changes: 1 addition & 1 deletion src/bootstrap/src/core/build_steps/format.rs
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ fn update_rustfmt_version(build: &Builder<'_>) {
}

/// Returns the Rust files modified between the `merge-base` of HEAD and
/// rust-lang/master and what is now on the disk.
/// rust-lang/master and what is now on the disk. Does not include removed files.
///
/// Returns `None` if all files should be formatted.
fn get_modified_rs_files(build: &Builder<'_>) -> Result<Option<Vec<String>>, String> {
Expand Down
17 changes: 12 additions & 5 deletions src/tools/build_helper/src/git.rs
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ pub fn get_git_merge_base(

/// Returns the files that have been modified in the current branch compared to the master branch.
/// The `extensions` parameter can be used to filter the files by their extension.
/// Does not include removed files.
/// If `extensions` is empty, all files will be returned.
pub fn get_git_modified_files(
config: &GitConfig<'_>,
Expand All @@ -125,13 +126,19 @@ pub fn get_git_modified_files(
if let Some(git_dir) = git_dir {
git.current_dir(git_dir);
}
let files = output_result(git.args(["diff-index", "--name-only", merge_base.trim()]))?
let files = output_result(git.args(["diff-index", "--name-status", merge_base.trim()]))?
.lines()
.map(|s| s.trim().to_owned())
.filter(|f| {
Path::new(f).extension().map_or(false, |ext| {
.filter_map(|f| {
let (status, name) = f.trim().split_once(char::is_whitespace).unwrap();
if status == "D" {
None
} else if Path::new(name).extension().map_or(false, |ext| {
extensions.is_empty() || extensions.contains(&ext.to_str().unwrap())
})
}) {
Some(name.to_owned())
} else {
None
}
})
.collect();
Ok(Some(files))
Expand Down

0 comments on commit af88518

Please sign in to comment.