diff options
author | Junio C Hamano <gitster@pobox.com> | 2020-08-19 16:14:49 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2020-08-19 16:14:49 -0700 |
commit | 93121dfd8c1aaed387fe4d5af7597cf0a675199b (patch) | |
tree | a8a202008e33735e6b5fa9cb878053b4c760ed66 | |
parent | Merge branch 'ak/sequencer-fix-find-uniq-abbrev' (diff) | |
parent | blame: only coalesce lines that are adjacent in result (diff) | |
download | tgif-93121dfd8c1aaed387fe4d5af7597cf0a675199b.tar.xz |
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
-rw-r--r-- | blame.c | 1 | ||||
-rwxr-xr-x | t/t8003-blame-corner-cases.sh | 28 |
2 files changed, 20 insertions, 9 deletions
@@ -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; diff --git a/t/t8003-blame-corner-cases.sh b/t/t8003-blame-corner-cases.sh index b871dd4f86..ba8013b002 100755 --- a/t/t8003-blame-corner-cases.sh +++ b/t/t8003-blame-corner-cases.sh @@ -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 && + $orig 1 1 2 + $orig 2 2 + EOF + 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 && - $oid 1) ABC - $oid 2) DEF + $orig 1) ABC + $orig 3) DEF EOF - git -c core.abbrev=$(test_oid hexsz) blame -s giraffe >actual && + git blame --no-abbrev -s -L1,1 -L3,3 $split giraffe >actual && test_cmp expect actual ' |