OSDN Git Service

Merge branch 'mk/combine-diff-context-horizon-fix' into maint
authorJunio C Hamano <gitster@pobox.com>
Thu, 27 Jun 2013 21:37:55 +0000 (14:37 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 27 Jun 2013 21:37:56 +0000 (14:37 -0700)
* mk/combine-diff-context-horizon-fix:
  combine-diff.c: Fix output when changes are exactly 3 lines apart

combine-diff.c
t/t4038-diff-combined.sh

index 77d7872..3e8bb17 100644 (file)
@@ -518,8 +518,11 @@ static int give_context(struct sline *sline, unsigned long cnt, int num_parent)
                unsigned long k;
 
                /* Paint a few lines before the first interesting line. */
-               while (j < i)
-                       sline[j++].flag |= mark | no_pre_delete;
+               while (j < i) {
+                       if (!(sline[j].flag & mark))
+                               sline[j].flag |= no_pre_delete;
+                       sline[j++].flag |= mark;
+               }
 
        again:
                /* we know up to i is to be included.  where does the
index 1261dbb..1019d7b 100755 (executable)
@@ -353,4 +353,52 @@ test_expect_failure 'combine diff coalesce three parents' '
        compare_diff_patch expected actual
 '
 
+# Test for a bug reported at
+# http://thread.gmane.org/gmane.comp.version-control.git/224410
+# where a delete lines were missing from combined diff output when they
+# occurred exactly before the context lines of a later change.
+test_expect_success 'combine diff missing delete bug' '
+       git commit -m initial --allow-empty &&
+       cat <<-\EOF >test &&
+       1
+       2
+       3
+       4
+       EOF
+       git add test &&
+       git commit -a -m side1 &&
+       git checkout -B side1 &&
+       git checkout HEAD^ &&
+       cat <<-\EOF >test &&
+       0
+       1
+       2
+       3
+       4modified
+       EOF
+       git add test &&
+       git commit -m side2 &&
+       git branch -f side2 &&
+       test_must_fail git merge --no-commit side1 &&
+       cat <<-\EOF >test &&
+       1
+       2
+       3
+       4modified
+       EOF
+       git add test &&
+       git commit -a -m merge &&
+       git diff-tree -c -p HEAD >actual.tmp &&
+       sed -e "1,/^@@@/d" < actual.tmp >actual &&
+       tr -d Q <<-\EOF >expected &&
+       - 0
+         1
+         2
+         3
+        -4
+        +4modified
+       EOF
+       compare_diff_patch expected actual
+'
+
 test_done