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(
128
128
continue ' outer;
129
129
} ;
130
130
131
- // We know `first_hunk_for_suspect` can’t be `None` here because we check `is_some()`
132
- // above.
133
131
let current_file_path = first_hunk_for_suspect
134
132
. source_file_name
135
133
. clone ( )
Original file line number Diff line number Diff line change @@ -487,6 +487,47 @@ mod blame_ranges {
487
487
}
488
488
}
489
489
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
+
490
531
fn fixture_path ( ) -> PathBuf {
491
532
gix_testtools:: scripted_fixture_read_only ( "make_blame_repo.sh" ) . unwrap ( )
492
533
}
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