File tree Expand file tree Collapse file tree 4 files changed +78
-2
lines changed Expand file tree Collapse file tree 4 files changed +78
-2
lines changed Original file line number Diff line number Diff 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 ( )
Original file line number Diff line number Diff 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+
490531fn fixture_path ( ) -> PathBuf {
491532 gix_testtools:: scripted_fixture_read_only ( "make_blame_repo.sh" ) . unwrap ( )
492533}
Original file line number Diff line number Diff line change 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
You can’t perform that action at this time.
0 commit comments