Skip to content

Commit 073487b

Browse files
authored
Merge pull request #2039 from cruessler/add-test-for-rename-tracking
Add test for rename tracking per hunk
2 parents 76eddf8 + 8e2bc0f commit 073487b

File tree

4 files changed

+78
-2
lines changed

4 files changed

+78
-2
lines changed

gix-blame/src/file/function.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,6 @@ pub fn file(
128128
continue 'outer;
129129
};
130130

131-
// We know `first_hunk_for_suspect` can’t be `None` here because we check `is_some()`
132-
// above.
133131
let current_file_path = first_hunk_for_suspect
134132
.source_file_name
135133
.clone()

gix-blame/tests/blame.rs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -487,6 +487,47 @@ mod blame_ranges {
487487
}
488488
}
489489

490+
mod rename_tracking {
491+
use gix_blame::BlameRanges;
492+
493+
use crate::{Baseline, Fixture};
494+
495+
#[test]
496+
fn source_file_name_is_tracked_per_hunk() {
497+
let worktree_path = gix_testtools::scripted_fixture_read_only("make_blame_rename_tracking_repo.sh").unwrap();
498+
499+
let Fixture {
500+
odb,
501+
mut resource_cache,
502+
suspect,
503+
} = Fixture::for_worktree_path(worktree_path.to_path_buf()).unwrap();
504+
505+
let source_file_name = "after-rename.txt";
506+
let lines_blamed = gix_blame::file(
507+
&odb,
508+
suspect,
509+
None,
510+
&mut resource_cache,
511+
source_file_name.into(),
512+
gix_blame::Options {
513+
diff_algorithm: gix_diff::blob::Algorithm::Histogram,
514+
range: BlameRanges::default(),
515+
since: None,
516+
rewrites: Some(gix_diff::Rewrites::default()),
517+
},
518+
)
519+
.unwrap()
520+
.entries;
521+
522+
assert_eq!(lines_blamed.len(), 3);
523+
524+
let git_dir = worktree_path.join(".git");
525+
let baseline = Baseline::collect(git_dir.join("after-rename.baseline"), source_file_name.into()).unwrap();
526+
527+
pretty_assertions::assert_eq!(lines_blamed, baseline);
528+
}
529+
}
530+
490531
fn fixture_path() -> PathBuf {
491532
gix_testtools::scripted_fixture_read_only("make_blame_repo.sh").unwrap()
492533
}
Binary file not shown.
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
#!/usr/bin/env bash
2+
set -eu -o pipefail
3+
4+
git init -q
5+
git config --local diff.algorithm histogram
6+
7+
git config merge.ff false
8+
9+
git checkout -q -b main
10+
11+
seq 1 4 > before-rename.txt
12+
git add before-rename.txt
13+
git commit -q -m c1
14+
15+
mv before-rename.txt after-rename.txt
16+
git add before-rename.txt after-rename.txt
17+
git commit -q -m c2
18+
19+
seq 1 5 > after-rename.txt
20+
git add after-rename.txt
21+
git commit -q -m c3
22+
23+
git checkout -b different-branch
24+
git reset --hard HEAD~2
25+
26+
seq 0 4 > before-rename.txt
27+
git add before-rename.txt
28+
git commit -q -m c10
29+
30+
mv before-rename.txt after-rename.txt
31+
git add before-rename.txt after-rename.txt
32+
git commit -q -m c11
33+
34+
git checkout main
35+
git merge different-branch || true
36+
37+
git blame --porcelain after-rename.txt > .git/after-rename.baseline

0 commit comments

Comments
 (0)