]>
Commit | Line | Data |
---|---|---|
8884cf15 TR |
1 | #!/bin/sh |
2 | ||
3 | test_description='range-diff tests' | |
4 | ||
5 | . ./test-lib.sh | |
6 | ||
7 | # Note that because of the range-diff's heuristics, test_commit does more | |
8 | # harm than good. We need some real history. | |
9 | ||
10 | test_expect_success 'setup' ' | |
b561edd2 | 11 | git fast-import < "$TEST_DIRECTORY"/t3206/history.export && |
12 | test_oid_cache <<-EOF | |
13 | # topic | |
14 | t1 sha1:4de457d | |
15 | t2 sha1:fccce22 | |
16 | t3 sha1:147e64e | |
17 | t4 sha1:a63e992 | |
18 | t1 sha256:b89f8b9 | |
19 | t2 sha256:5f12aad | |
20 | t3 sha256:ea8b273 | |
21 | t4 sha256:14b7336 | |
22 | ||
23 | # unmodified | |
24 | u1 sha1:35b9b25 | |
25 | u2 sha1:de345ab | |
26 | u3 sha1:9af6654 | |
27 | u4 sha1:2901f77 | |
28 | u1 sha256:e3731be | |
29 | u2 sha256:14fadf8 | |
30 | u3 sha256:736c4bc | |
31 | u4 sha256:673e77d | |
32 | ||
33 | # reordered | |
34 | r1 sha1:aca177a | |
35 | r2 sha1:14ad629 | |
36 | r3 sha1:ee58208 | |
37 | r4 sha1:307b27a | |
38 | r1 sha256:f59d3aa | |
39 | r2 sha256:fb261a8 | |
40 | r3 sha256:cb2649b | |
41 | r4 sha256:958577e | |
42 | ||
43 | # removed (deleted) | |
44 | d1 sha1:7657159 | |
45 | d2 sha1:43d84d3 | |
46 | d3 sha1:a740396 | |
47 | d1 sha256:e312513 | |
48 | d2 sha256:eb19258 | |
49 | d3 sha256:1ccb3c1 | |
50 | ||
51 | # added | |
52 | a1 sha1:2716022 | |
53 | a2 sha1:b62accd | |
54 | a3 sha1:df46cfa | |
55 | a4 sha1:3e64548 | |
56 | a5 sha1:12b4063 | |
57 | a1 sha256:d724f4d | |
58 | a2 sha256:1de7762 | |
59 | a3 sha256:e159431 | |
60 | a4 sha256:b3e483c | |
61 | a5 sha256:90866a7 | |
62 | ||
63 | # rebased | |
64 | b1 sha1:cc9c443 | |
65 | b2 sha1:c5d9641 | |
66 | b3 sha1:28cc2b6 | |
67 | b4 sha1:5628ab7 | |
68 | b5 sha1:a31b12e | |
69 | b1 sha256:a1a8717 | |
70 | b2 sha256:20a5862 | |
71 | b3 sha256:587172a | |
72 | b4 sha256:2721c5d | |
73 | b5 sha256:7b57864 | |
74 | ||
75 | # changed | |
76 | c1 sha1:a4b3333 | |
77 | c2 sha1:f51d370 | |
78 | c3 sha1:0559556 | |
79 | c4 sha1:d966c5c | |
80 | c1 sha256:f8c2b9d | |
81 | c2 sha256:3fb6318 | |
82 | c3 sha256:168ab68 | |
83 | c4 sha256:3526539 | |
84 | ||
85 | # changed-message | |
86 | m1 sha1:f686024 | |
87 | m2 sha1:4ab067d | |
88 | m3 sha1:b9cb956 | |
89 | m4 sha1:8add5f1 | |
90 | m1 sha256:31e6281 | |
91 | m2 sha256:a06bf1b | |
92 | m3 sha256:82dc654 | |
93 | m4 sha256:48470c5 | |
94 | ||
95 | # renamed | |
96 | n1 sha1:f258d75 | |
97 | n2 sha1:017b62d | |
98 | n3 sha1:3ce7af6 | |
99 | n4 sha1:1e6226b | |
100 | n1 sha256:ad52114 | |
101 | n2 sha256:3b54c8f | |
102 | n3 sha256:3b0a644 | |
103 | n4 sha256:e461653 | |
104 | ||
105 | # added and removed | |
106 | s1 sha1:096b1ba | |
107 | s2 sha1:d92e698 | |
108 | s3 sha1:9a1db4d | |
109 | s4 sha1:fea3b5c | |
110 | s1 sha256:a7f9134 | |
111 | s2 sha256:b4c2580 | |
112 | s3 sha256:1d62aa2 | |
113 | s4 sha256:48160e8 | |
114 | ||
115 | # Empty delimiter (included so lines match neatly) | |
116 | __ sha1:------- | |
117 | __ sha256:------- | |
118 | EOF | |
8884cf15 TR |
119 | ' |
120 | ||
121 | test_expect_success 'simple A..B A..C (unmodified)' ' | |
122 | git range-diff --no-color master..topic master..unmodified \ | |
123 | >actual && | |
124 | cat >expected <<-EOF && | |
b561edd2 | 125 | 1: $(test_oid t1) = 1: $(test_oid u1) s/5/A/ |
126 | 2: $(test_oid t2) = 2: $(test_oid u2) s/4/A/ | |
127 | 3: $(test_oid t3) = 3: $(test_oid u3) s/11/B/ | |
128 | 4: $(test_oid t4) = 4: $(test_oid u4) s/12/B/ | |
8884cf15 TR |
129 | EOF |
130 | test_cmp expected actual | |
131 | ' | |
132 | ||
133 | test_expect_success 'simple B...C (unmodified)' ' | |
134 | git range-diff --no-color topic...unmodified >actual && | |
135 | # same "expected" as above | |
136 | test_cmp expected actual | |
137 | ' | |
138 | ||
139 | test_expect_success 'simple A B C (unmodified)' ' | |
140 | git range-diff --no-color master topic unmodified >actual && | |
141 | # same "expected" as above | |
142 | test_cmp expected actual | |
143 | ' | |
144 | ||
145 | test_expect_success 'trivial reordering' ' | |
146 | git range-diff --no-color master topic reordered >actual && | |
147 | cat >expected <<-EOF && | |
b561edd2 | 148 | 1: $(test_oid t1) = 1: $(test_oid r1) s/5/A/ |
149 | 3: $(test_oid t3) = 2: $(test_oid r2) s/11/B/ | |
150 | 4: $(test_oid t4) = 3: $(test_oid r3) s/12/B/ | |
151 | 2: $(test_oid t2) = 4: $(test_oid r4) s/4/A/ | |
8884cf15 TR |
152 | EOF |
153 | test_cmp expected actual | |
154 | ' | |
155 | ||
156 | test_expect_success 'removed a commit' ' | |
157 | git range-diff --no-color master topic removed >actual && | |
158 | cat >expected <<-EOF && | |
b561edd2 | 159 | 1: $(test_oid t1) = 1: $(test_oid d1) s/5/A/ |
160 | 2: $(test_oid t2) < -: $(test_oid __) s/4/A/ | |
161 | 3: $(test_oid t3) = 2: $(test_oid d2) s/11/B/ | |
162 | 4: $(test_oid t4) = 3: $(test_oid d3) s/12/B/ | |
8884cf15 TR |
163 | EOF |
164 | test_cmp expected actual | |
165 | ' | |
166 | ||
167 | test_expect_success 'added a commit' ' | |
168 | git range-diff --no-color master topic added >actual && | |
169 | cat >expected <<-EOF && | |
b561edd2 | 170 | 1: $(test_oid t1) = 1: $(test_oid a1) s/5/A/ |
171 | 2: $(test_oid t2) = 2: $(test_oid a2) s/4/A/ | |
172 | -: $(test_oid __) > 3: $(test_oid a3) s/6/A/ | |
173 | 3: $(test_oid t3) = 4: $(test_oid a4) s/11/B/ | |
174 | 4: $(test_oid t4) = 5: $(test_oid a5) s/12/B/ | |
8884cf15 TR |
175 | EOF |
176 | test_cmp expected actual | |
177 | ' | |
178 | ||
179 | test_expect_success 'new base, A B C' ' | |
180 | git range-diff --no-color master topic rebased >actual && | |
181 | cat >expected <<-EOF && | |
b561edd2 | 182 | 1: $(test_oid t1) = 1: $(test_oid b1) s/5/A/ |
183 | 2: $(test_oid t2) = 2: $(test_oid b2) s/4/A/ | |
184 | 3: $(test_oid t3) = 3: $(test_oid b3) s/11/B/ | |
185 | 4: $(test_oid t4) = 4: $(test_oid b4) s/12/B/ | |
8884cf15 TR |
186 | EOF |
187 | test_cmp expected actual | |
188 | ' | |
189 | ||
190 | test_expect_success 'new base, B...C' ' | |
191 | # this syntax includes the commits from master! | |
192 | git range-diff --no-color topic...rebased >actual && | |
193 | cat >expected <<-EOF && | |
b561edd2 | 194 | -: $(test_oid __) > 1: $(test_oid b5) unrelated |
195 | 1: $(test_oid t1) = 2: $(test_oid b1) s/5/A/ | |
196 | 2: $(test_oid t2) = 3: $(test_oid b2) s/4/A/ | |
197 | 3: $(test_oid t3) = 4: $(test_oid b3) s/11/B/ | |
198 | 4: $(test_oid t4) = 5: $(test_oid b4) s/12/B/ | |
8884cf15 TR |
199 | EOF |
200 | test_cmp expected actual | |
201 | ' | |
202 | ||
203 | test_expect_success 'changed commit' ' | |
204 | git range-diff --no-color topic...changed >actual && | |
205 | cat >expected <<-EOF && | |
b561edd2 | 206 | 1: $(test_oid t1) = 1: $(test_oid c1) s/5/A/ |
207 | 2: $(test_oid t2) = 2: $(test_oid c2) s/4/A/ | |
208 | 3: $(test_oid t3) ! 3: $(test_oid c3) s/11/B/ | |
499352c2 | 209 | @@ file: A |
8884cf15 TR |
210 | 9 |
211 | 10 | |
212 | -11 | |
213 | -+B | |
214 | ++BB | |
215 | 12 | |
216 | 13 | |
217 | 14 | |
b561edd2 | 218 | 4: $(test_oid t4) ! 4: $(test_oid c4) s/12/B/ |
499352c2 | 219 | @@ file |
444e0969 | 220 | @@ file: A |
8884cf15 TR |
221 | 9 |
222 | 10 | |
223 | - B | |
224 | + BB | |
225 | -12 | |
226 | +B | |
227 | 13 | |
228 | EOF | |
229 | test_cmp expected actual | |
230 | ' | |
231 | ||
4624185a ÆAB |
232 | test_expect_success 'changed commit with --no-patch diff option' ' |
233 | git range-diff --no-color --no-patch topic...changed >actual && | |
234 | cat >expected <<-EOF && | |
b561edd2 | 235 | 1: $(test_oid t1) = 1: $(test_oid c1) s/5/A/ |
236 | 2: $(test_oid t2) = 2: $(test_oid c2) s/4/A/ | |
237 | 3: $(test_oid t3) ! 3: $(test_oid c3) s/11/B/ | |
238 | 4: $(test_oid t4) ! 4: $(test_oid c4) s/12/B/ | |
4624185a ÆAB |
239 | EOF |
240 | test_cmp expected actual | |
241 | ' | |
242 | ||
243 | test_expect_success 'changed commit with --stat diff option' ' | |
4624185a ÆAB |
244 | git range-diff --no-color --stat topic...changed >actual && |
245 | cat >expected <<-EOF && | |
b561edd2 | 246 | 1: $(test_oid t1) = 1: $(test_oid c1) s/5/A/ |
4624185a ÆAB |
247 | a => b | 0 |
248 | 1 file changed, 0 insertions(+), 0 deletions(-) | |
b561edd2 | 249 | 2: $(test_oid t2) = 2: $(test_oid c2) s/4/A/ |
4624185a ÆAB |
250 | a => b | 0 |
251 | 1 file changed, 0 insertions(+), 0 deletions(-) | |
b561edd2 | 252 | 3: $(test_oid t3) ! 3: $(test_oid c3) s/11/B/ |
4624185a ÆAB |
253 | a => b | 0 |
254 | 1 file changed, 0 insertions(+), 0 deletions(-) | |
b561edd2 | 255 | 4: $(test_oid t4) ! 4: $(test_oid c4) s/12/B/ |
4624185a ÆAB |
256 | a => b | 0 |
257 | 1 file changed, 0 insertions(+), 0 deletions(-) | |
4624185a ÆAB |
258 | EOF |
259 | test_cmp expected actual | |
260 | ' | |
261 | ||
0e573e8f LDM |
262 | test_expect_success 'changed commit with sm config' ' |
263 | git range-diff --no-color --submodule=log topic...changed >actual && | |
264 | cat >expected <<-EOF && | |
b561edd2 | 265 | 1: $(test_oid t1) = 1: $(test_oid c1) s/5/A/ |
266 | 2: $(test_oid t2) = 2: $(test_oid c2) s/4/A/ | |
267 | 3: $(test_oid t3) ! 3: $(test_oid c3) s/11/B/ | |
499352c2 | 268 | @@ file: A |
0e573e8f LDM |
269 | 9 |
270 | 10 | |
271 | -11 | |
272 | -+B | |
273 | ++BB | |
274 | 12 | |
275 | 13 | |
276 | 14 | |
b561edd2 | 277 | 4: $(test_oid t4) ! 4: $(test_oid c4) s/12/B/ |
499352c2 | 278 | @@ file |
444e0969 | 279 | @@ file: A |
0e573e8f LDM |
280 | 9 |
281 | 10 | |
282 | - B | |
283 | + BB | |
284 | -12 | |
285 | +B | |
286 | 13 | |
287 | EOF | |
288 | test_cmp expected actual | |
289 | ' | |
290 | ||
b66885a3 TG |
291 | test_expect_success 'renamed file' ' |
292 | git range-diff --no-color --submodule=log topic...renamed-file >actual && | |
293 | sed s/Z/\ /g >expected <<-EOF && | |
b561edd2 | 294 | 1: $(test_oid t1) = 1: $(test_oid n1) s/5/A/ |
295 | 2: $(test_oid t2) ! 2: $(test_oid n2) s/4/A/ | |
499352c2 | 296 | @@ Metadata |
b66885a3 TG |
297 | ZAuthor: Thomas Rast <trast@inf.ethz.ch> |
298 | Z | |
499352c2 | 299 | Z ## Commit message ## |
b66885a3 TG |
300 | - s/4/A/ |
301 | + s/4/A/ + rename file | |
302 | Z | |
303 | - ## file ## | |
304 | + ## file => renamed-file ## | |
305 | Z@@ | |
306 | Z 1 | |
307 | Z 2 | |
b561edd2 | 308 | 3: $(test_oid t3) ! 3: $(test_oid n3) s/11/B/ |
499352c2 TG |
309 | @@ Metadata |
310 | Z ## Commit message ## | |
b66885a3 TG |
311 | Z s/11/B/ |
312 | Z | |
313 | - ## file ## | |
444e0969 | 314 | -@@ file: A |
b66885a3 | 315 | + ## renamed-file ## |
444e0969 | 316 | +@@ renamed-file: A |
b66885a3 TG |
317 | Z 8 |
318 | Z 9 | |
444e0969 | 319 | Z 10 |
b561edd2 | 320 | 4: $(test_oid t4) ! 4: $(test_oid n4) s/12/B/ |
499352c2 TG |
321 | @@ Metadata |
322 | Z ## Commit message ## | |
b66885a3 TG |
323 | Z s/12/B/ |
324 | Z | |
325 | - ## file ## | |
444e0969 | 326 | -@@ file: A |
b66885a3 | 327 | + ## renamed-file ## |
444e0969 | 328 | +@@ renamed-file: A |
b66885a3 TG |
329 | Z 9 |
330 | Z 10 | |
444e0969 | 331 | Z B |
b66885a3 TG |
332 | EOF |
333 | test_cmp expected actual | |
334 | ' | |
335 | ||
336 | test_expect_success 'file added and later removed' ' | |
337 | git range-diff --no-color --submodule=log topic...added-removed >actual && | |
338 | sed s/Z/\ /g >expected <<-EOF && | |
b561edd2 | 339 | 1: $(test_oid t1) = 1: $(test_oid s1) s/5/A/ |
340 | 2: $(test_oid t2) ! 2: $(test_oid s2) s/4/A/ | |
499352c2 | 341 | @@ Metadata |
b66885a3 TG |
342 | ZAuthor: Thomas Rast <trast@inf.ethz.ch> |
343 | Z | |
499352c2 | 344 | Z ## Commit message ## |
b66885a3 TG |
345 | - s/4/A/ |
346 | + s/4/A/ + new-file | |
347 | Z | |
348 | Z ## file ## | |
349 | Z@@ | |
499352c2 | 350 | @@ file |
b66885a3 TG |
351 | Z A |
352 | Z 6 | |
353 | Z 7 | |
354 | + | |
355 | + ## new-file (new) ## | |
b561edd2 | 356 | 3: $(test_oid t3) ! 3: $(test_oid s3) s/11/B/ |
499352c2 | 357 | @@ Metadata |
b66885a3 TG |
358 | ZAuthor: Thomas Rast <trast@inf.ethz.ch> |
359 | Z | |
499352c2 | 360 | Z ## Commit message ## |
b66885a3 TG |
361 | - s/11/B/ |
362 | + s/11/B/ + remove file | |
363 | Z | |
364 | Z ## file ## | |
444e0969 | 365 | Z@@ file: A |
499352c2 | 366 | @@ file: A |
b66885a3 TG |
367 | Z 12 |
368 | Z 13 | |
369 | Z 14 | |
370 | + | |
371 | + ## new-file (deleted) ## | |
b561edd2 | 372 | 4: $(test_oid t4) = 4: $(test_oid s4) s/12/B/ |
b66885a3 TG |
373 | EOF |
374 | test_cmp expected actual | |
375 | ' | |
376 | ||
51bbcda1 JH |
377 | test_expect_success 'no commits on one side' ' |
378 | git commit --amend -m "new message" && | |
379 | git range-diff master HEAD@{1} HEAD | |
380 | ' | |
381 | ||
8884cf15 TR |
382 | test_expect_success 'changed message' ' |
383 | git range-diff --no-color topic...changed-message >actual && | |
384 | sed s/Z/\ /g >expected <<-EOF && | |
b561edd2 | 385 | 1: $(test_oid t1) = 1: $(test_oid m1) s/5/A/ |
386 | 2: $(test_oid t2) ! 2: $(test_oid m2) s/4/A/ | |
499352c2 TG |
387 | @@ Metadata |
388 | Z ## Commit message ## | |
8884cf15 TR |
389 | Z s/4/A/ |
390 | Z | |
391 | + Also a silly comment here! | |
392 | + | |
b66885a3 TG |
393 | Z ## file ## |
394 | Z@@ | |
395 | Z 1 | |
b561edd2 | 396 | 3: $(test_oid t3) = 3: $(test_oid m3) s/11/B/ |
397 | 4: $(test_oid t4) = 4: $(test_oid m4) s/12/B/ | |
8884cf15 TR |
398 | EOF |
399 | test_cmp expected actual | |
400 | ' | |
401 | ||
c5e64caa | 402 | test_expect_success 'dual-coloring' ' |
b561edd2 | 403 | sed -e "s|^:||" >expect <<-EOF && |
404 | :<YELLOW>1: $(test_oid c1) = 1: $(test_oid m1) s/5/A/<RESET> | |
405 | :<RED>2: $(test_oid c2) <RESET><YELLOW>!<RESET><GREEN> 2: $(test_oid m2)<RESET><YELLOW> s/4/A/<RESET> | |
499352c2 TG |
406 | : <REVERSE><CYAN>@@<RESET> <RESET>Metadata<RESET> |
407 | : ## Commit message ##<RESET> | |
c5e64caa SB |
408 | : s/4/A/<RESET> |
409 | : <RESET> | |
410 | : <REVERSE><GREEN>+<RESET><BOLD> Also a silly comment here!<RESET> | |
29ef759d | 411 | : <REVERSE><GREEN>+<RESET> |
b66885a3 TG |
412 | : ## file ##<RESET> |
413 | : <CYAN> @@<RESET> | |
414 | : 1<RESET> | |
b561edd2 | 415 | :<RED>3: $(test_oid c3) <RESET><YELLOW>!<RESET><GREEN> 3: $(test_oid m3)<RESET><YELLOW> s/11/B/<RESET> |
499352c2 | 416 | : <REVERSE><CYAN>@@<RESET> <RESET>file: A<RESET> |
c5e64caa SB |
417 | : 9<RESET> |
418 | : 10<RESET> | |
419 | : <RED> -11<RESET> | |
420 | : <REVERSE><RED>-<RESET><FAINT;GREEN>+BB<RESET> | |
421 | : <REVERSE><GREEN>+<RESET><BOLD;GREEN>+B<RESET> | |
422 | : 12<RESET> | |
423 | : 13<RESET> | |
424 | : 14<RESET> | |
b561edd2 | 425 | :<RED>4: $(test_oid c4) <RESET><YELLOW>!<RESET><GREEN> 4: $(test_oid m4)<RESET><YELLOW> s/12/B/<RESET> |
499352c2 | 426 | : <REVERSE><CYAN>@@<RESET> <RESET>file<RESET> |
444e0969 | 427 | : <CYAN> @@ file: A<RESET> |
c5e64caa SB |
428 | : 9<RESET> |
429 | : 10<RESET> | |
430 | : <REVERSE><RED>-<RESET><FAINT> BB<RESET> | |
431 | : <REVERSE><GREEN>+<RESET><BOLD> B<RESET> | |
432 | : <RED> -12<RESET> | |
433 | : <GREEN> +B<RESET> | |
434 | : 13<RESET> | |
435 | EOF | |
436 | git range-diff changed...changed-message --color --dual-color >actual.raw && | |
437 | test_decode_color >actual <actual.raw && | |
438 | test_cmp expect actual | |
439 | ' | |
440 | ||
2e6fd71a | 441 | for prev in topic master..topic |
31e2617a ES |
442 | do |
443 | test_expect_success "format-patch --range-diff=$prev" ' | |
ac0edf1f | 444 | git format-patch --cover-letter --range-diff=$prev \ |
31e2617a | 445 | master..unmodified >actual && |
ac0edf1f MÅ |
446 | test_when_finished "rm 000?-*" && |
447 | test_line_count = 5 actual && | |
448 | test_i18ngrep "^Range-diff:$" 0000-* && | |
449 | grep "= 1: .* s/5/A" 0000-* && | |
450 | grep "= 2: .* s/4/A" 0000-* && | |
451 | grep "= 3: .* s/11/B" 0000-* && | |
452 | grep "= 4: .* s/12/B" 0000-* | |
31e2617a ES |
453 | ' |
454 | done | |
455 | ||
cdc067c3 | 456 | test_expect_success 'format-patch --range-diff as commentary' ' |
ac0edf1f MÅ |
457 | git format-patch --range-diff=HEAD~1 HEAD~1 >actual && |
458 | test_when_finished "rm 0001-*" && | |
459 | test_line_count = 1 actual && | |
460 | test_i18ngrep "^Range-diff:$" 0001-* && | |
461 | grep "> 1: .* new message" 0001-* | |
cdc067c3 DS |
462 | ' |
463 | ||
8884cf15 | 464 | test_done |