Raw
1 #!/bin/sh
2
3 test_description='shifted diff groups re-diffing during histogram diff'
4
5 . ./test-lib.sh
6
7 test_expect_success 'shifted/merged diff group should re-diff to minimize patch' '
8 test_write_lines A x A A A x A A A >file1 &&
9 test_write_lines A x A Z A x A A A >file2 &&
10
11 file1_h=$(git rev-parse --short $(git hash-object file1)) &&
12 file2_h=$(git rev-parse --short $(git hash-object file2)) &&
13
14 cat >expect <<-EOF &&
15 diff --git a/file1 b/file2
16 index $file1_h..$file2_h 100644
17 --- a/file1
18 +++ b/file2
19 @@ -1,7 +1,7 @@
20 A
21 x
22 A
23 -A
24 +Z
25 A
26 x
27 A
28 EOF
29
30 test_expect_code 1 git diff --no-index --histogram file1 file2 >output &&
31 test_cmp expect output
32 '
33
34 test_expect_success 'merged diff group with no shift' '
35 test_write_lines A Z B x >file1 &&
36 test_write_lines C D x Z E x >file2 &&
37
38 file1_h=$(git rev-parse --short $(git hash-object file1)) &&
39 file2_h=$(git rev-parse --short $(git hash-object file2)) &&
40
41 cat >expect <<-EOF &&
42 diff --git a/file1 b/file2
43 index $file1_h..$file2_h 100644
44 --- a/file1
45 +++ b/file2
46 @@ -1,4 +1,6 @@
47 -A
48 +C
49 +D
50 +x
51 Z
52 -B
53 +E
54 x
55 EOF
56
57 test_expect_code 1 git diff --no-index --histogram file1 file2 >output &&
58 test_cmp expect output
59 '
60
61 test_expect_success 're-diff should preserve diff flags' '
62 test_write_lines a b c a b c >file1 &&
63 test_write_lines x " b" z a b c >file2 &&
64
65 file1_h=$(git rev-parse --short $(git hash-object file1)) &&
66 file2_h=$(git rev-parse --short $(git hash-object file2)) &&
67
68 cat >expect <<-EOF &&
69 diff --git a/file1 b/file2
70 index $file1_h..$file2_h 100644
71 --- a/file1
72 +++ b/file2
73 @@ -1,6 +1,6 @@
74 -a
75 -b
76 -c
77 +x
78 + b
79 +z
80 a
81 b
82 c
83 EOF
84
85 test_expect_code 1 git diff --no-index --histogram file1 file2 >output &&
86 test_cmp expect output &&
87
88 cat >expect_iwhite <<-EOF &&
89 diff --git a/file1 b/file2
90 index $file1_h..$file2_h 100644
91 --- a/file1
92 +++ b/file2
93 @@ -1,6 +1,6 @@
94 -a
95 +x
96 b
97 -c
98 +z
99 a
100 b
101 c
102 EOF
103
104 test_expect_code 1 git diff --no-index --histogram --ignore-all-space file1 file2 >output_iwhite &&
105 test_cmp expect_iwhite output_iwhite
106 '
107
108 test_expect_success 'shifting on either side should trigger re-diff properly' '
109 test_write_lines a b c a b c a b c >file1 &&
110 test_write_lines a b c a1 a2 a3 b c1 a b c >file2 &&
111
112 file1_h=$(git rev-parse --short $(git hash-object file1)) &&
113 file2_h=$(git rev-parse --short $(git hash-object file2)) &&
114
115 cat >expect1 <<-EOF &&
116 diff --git a/file1 b/file2
117 index $file1_h..$file2_h 100644
118 --- a/file1
119 +++ b/file2
120 @@ -1,9 +1,11 @@
121 a
122 b
123 c
124 -a
125 +a1
126 +a2
127 +a3
128 b
129 -c
130 +c1
131 a
132 b
133 c
134 EOF
135
136 test_expect_code 1 git diff --no-index --histogram file1 file2 >output1 &&
137 test_cmp expect1 output1 &&
138
139 cat >expect2 <<-EOF &&
140 diff --git a/file2 b/file1
141 index $file2_h..$file1_h 100644
142 --- a/file2
143 +++ b/file1
144 @@ -1,11 +1,9 @@
145 a
146 b
147 c
148 -a1
149 -a2
150 -a3
151 +a
152 b
153 -c1
154 +c
155 a
156 b
157 c
158 EOF
159
160 test_expect_code 1 git diff --no-index --histogram file2 file1 >output2 &&
161 test_cmp expect2 output2
162 '
163
164 test_done