Merge branch 'jk/blame-coalesce-fix'
When given more than one target line ranges, "git blame -La,b -Lc,d" was over-eager to coalesce groups of original lines and showed incorrect results, which has been corrected. * jk/blame-coalesce-fix: blame: only coalesce lines that are adjacent in result t8003: factor setup out of coalesce test t8003: check output of coalesced blame
This commit is contained in:
commit
93121dfd8c
1
blame.c
1
blame.c
@ -1184,6 +1184,7 @@ void blame_coalesce(struct blame_scoreboard *sb)
|
||||
for (ent = sb->ent; ent && (next = ent->next); ent = next) {
|
||||
if (ent->suspect == next->suspect &&
|
||||
ent->s_lno + ent->num_lines == next->s_lno &&
|
||||
ent->lno + ent->num_lines == next->lno &&
|
||||
ent->ignored == next->ignored &&
|
||||
ent->unblamable == next->unblamable) {
|
||||
ent->num_lines += next->num_lines;
|
||||
|
@ -273,18 +273,14 @@ test_expect_success 'blame file with CRLF core.autocrlf=true' '
|
||||
grep "A U Thor" actual
|
||||
'
|
||||
|
||||
# Tests the splitting and merging of blame entries in blame_coalesce().
|
||||
# The output of blame is the same, regardless of whether blame_coalesce() runs
|
||||
# or not, so we'd likely only notice a problem if blame crashes or assigned
|
||||
# blame to the "splitting" commit ('SPLIT' below).
|
||||
test_expect_success 'blame coalesce' '
|
||||
test_expect_success 'setup coalesce tests' '
|
||||
cat >giraffe <<-\EOF &&
|
||||
ABC
|
||||
DEF
|
||||
EOF
|
||||
git add giraffe &&
|
||||
git commit -m "original file" &&
|
||||
oid=$(git rev-parse HEAD) &&
|
||||
orig=$(git rev-parse HEAD) &&
|
||||
|
||||
cat >giraffe <<-\EOF &&
|
||||
ABC
|
||||
@ -293,6 +289,7 @@ test_expect_success 'blame coalesce' '
|
||||
EOF
|
||||
git add giraffe &&
|
||||
git commit -m "interior SPLIT line" &&
|
||||
split=$(git rev-parse HEAD) &&
|
||||
|
||||
cat >giraffe <<-\EOF &&
|
||||
ABC
|
||||
@ -300,12 +297,25 @@ test_expect_success 'blame coalesce' '
|
||||
EOF
|
||||
git add giraffe &&
|
||||
git commit -m "same contents as original" &&
|
||||
final=$(git rev-parse HEAD)
|
||||
'
|
||||
|
||||
test_expect_success 'blame coalesce' '
|
||||
cat >expect <<-EOF &&
|
||||
$oid 1) ABC
|
||||
$oid 2) DEF
|
||||
$orig 1 1 2
|
||||
$orig 2 2
|
||||
EOF
|
||||
git -c core.abbrev=$(test_oid hexsz) blame -s giraffe >actual &&
|
||||
git blame --porcelain $final giraffe >actual.raw &&
|
||||
grep "^$orig" actual.raw >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'blame does not coalesce non-adjacent result lines' '
|
||||
cat >expect <<-EOF &&
|
||||
$orig 1) ABC
|
||||
$orig 3) DEF
|
||||
EOF
|
||||
git blame --no-abbrev -s -L1,1 -L3,3 $split giraffe >actual &&
|
||||
test_cmp expect actual
|
||||
'
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user