aboutsummaryrefslogtreecommitdiff
path: root/t/t4074-diff-shifted-matched-group.sh
diff options
context:
space:
mode:
Diffstat (limited to 't/t4074-diff-shifted-matched-group.sh')
-rwxr-xr-xt/t4074-diff-shifted-matched-group.sh164
1 files changed, 164 insertions, 0 deletions
diff --git a/t/t4074-diff-shifted-matched-group.sh b/t/t4074-diff-shifted-matched-group.sh
new file mode 100755
index 0000000000..d77fa3b79d
--- /dev/null
+++ b/t/t4074-diff-shifted-matched-group.sh
@@ -0,0 +1,164 @@
+#!/bin/sh
+
+test_description='shifted diff groups re-diffing during histogram diff'
+
+. ./test-lib.sh
+
+test_expect_success 'shifted/merged diff group should re-diff to minimize patch' '
+ test_write_lines A x A A A x A A A >file1 &&
+ test_write_lines A x A Z A x A A A >file2 &&
+
+ file1_h=$(git rev-parse --short $(git hash-object file1)) &&
+ file2_h=$(git rev-parse --short $(git hash-object file2)) &&
+
+ cat >expect <<-EOF &&
+ diff --git a/file1 b/file2
+ index $file1_h..$file2_h 100644
+ --- a/file1
+ +++ b/file2
+ @@ -1,7 +1,7 @@
+ A
+ x
+ A
+ -A
+ +Z
+ A
+ x
+ A
+ EOF
+
+ test_expect_code 1 git diff --no-index --histogram file1 file2 >output &&
+ test_cmp expect output
+'
+
+test_expect_success 'merged diff group with no shift' '
+ test_write_lines A Z B x >file1 &&
+ test_write_lines C D x Z E x >file2 &&
+
+ file1_h=$(git rev-parse --short $(git hash-object file1)) &&
+ file2_h=$(git rev-parse --short $(git hash-object file2)) &&
+
+ cat >expect <<-EOF &&
+ diff --git a/file1 b/file2
+ index $file1_h..$file2_h 100644
+ --- a/file1
+ +++ b/file2
+ @@ -1,4 +1,6 @@
+ -A
+ +C
+ +D
+ +x
+ Z
+ -B
+ +E
+ x
+ EOF
+
+ test_expect_code 1 git diff --no-index --histogram file1 file2 >output &&
+ test_cmp expect output
+'
+
+test_expect_success 're-diff should preserve diff flags' '
+ test_write_lines a b c a b c >file1 &&
+ test_write_lines x " b" z a b c >file2 &&
+
+ file1_h=$(git rev-parse --short $(git hash-object file1)) &&
+ file2_h=$(git rev-parse --short $(git hash-object file2)) &&
+
+ cat >expect <<-EOF &&
+ diff --git a/file1 b/file2
+ index $file1_h..$file2_h 100644
+ --- a/file1
+ +++ b/file2
+ @@ -1,6 +1,6 @@
+ -a
+ -b
+ -c
+ +x
+ + b
+ +z
+ a
+ b
+ c
+ EOF
+
+ test_expect_code 1 git diff --no-index --histogram file1 file2 >output &&
+ test_cmp expect output &&
+
+ cat >expect_iwhite <<-EOF &&
+ diff --git a/file1 b/file2
+ index $file1_h..$file2_h 100644
+ --- a/file1
+ +++ b/file2
+ @@ -1,6 +1,6 @@
+ -a
+ +x
+ b
+ -c
+ +z
+ a
+ b
+ c
+ EOF
+
+ test_expect_code 1 git diff --no-index --histogram --ignore-all-space file1 file2 >output_iwhite &&
+ test_cmp expect_iwhite output_iwhite
+'
+
+test_expect_success 'shifting on either side should trigger re-diff properly' '
+ test_write_lines a b c a b c a b c >file1 &&
+ test_write_lines a b c a1 a2 a3 b c1 a b c >file2 &&
+
+ file1_h=$(git rev-parse --short $(git hash-object file1)) &&
+ file2_h=$(git rev-parse --short $(git hash-object file2)) &&
+
+ cat >expect1 <<-EOF &&
+ diff --git a/file1 b/file2
+ index $file1_h..$file2_h 100644
+ --- a/file1
+ +++ b/file2
+ @@ -1,9 +1,11 @@
+ a
+ b
+ c
+ -a
+ +a1
+ +a2
+ +a3
+ b
+ -c
+ +c1
+ a
+ b
+ c
+ EOF
+
+ test_expect_code 1 git diff --no-index --histogram file1 file2 >output1 &&
+ test_cmp expect1 output1 &&
+
+ cat >expect2 <<-EOF &&
+ diff --git a/file2 b/file1
+ index $file2_h..$file1_h 100644
+ --- a/file2
+ +++ b/file1
+ @@ -1,11 +1,9 @@
+ a
+ b
+ c
+ -a1
+ -a2
+ -a3
+ +a
+ b
+ -c1
+ +c
+ a
+ b
+ c
+ EOF
+
+ test_expect_code 1 git diff --no-index --histogram file2 file1 >output2 &&
+ test_cmp expect2 output2
+'
+
+test_done