]>
Commit | Line | Data |
---|---|---|
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' ' | |
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 | |
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 && | |
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/ | |
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 && | |
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/ | |
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 && | |
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/ | |
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 && | |
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/ | |
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 && | |
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/ | |
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 && | |
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/ | |
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 && | |
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/ | |
209 | @@ file: A | |
210 | 9 | |
211 | 10 | |
212 | -11 | |
213 | -+B | |
214 | ++BB | |
215 | 12 | |
216 | 13 | |
217 | 14 | |
218 | 4: $(test_oid t4) ! 4: $(test_oid c4) s/12/B/ | |
219 | @@ file | |
220 | @@ file: A | |
221 | 9 | |
222 | 10 | |
223 | - B | |
224 | + BB | |
225 | -12 | |
226 | +B | |
227 | 13 | |
228 | EOF | |
229 | test_cmp expected actual | |
230 | ' | |
231 | ||
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 && | |
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/ | |
239 | EOF | |
240 | test_cmp expected actual | |
241 | ' | |
242 | ||
243 | test_expect_success 'changed commit with --stat diff option' ' | |
244 | git range-diff --no-color --stat topic...changed >actual && | |
245 | cat >expected <<-EOF && | |
246 | 1: $(test_oid t1) = 1: $(test_oid c1) s/5/A/ | |
247 | a => b | 0 | |
248 | 1 file changed, 0 insertions(+), 0 deletions(-) | |
249 | 2: $(test_oid t2) = 2: $(test_oid c2) s/4/A/ | |
250 | a => b | 0 | |
251 | 1 file changed, 0 insertions(+), 0 deletions(-) | |
252 | 3: $(test_oid t3) ! 3: $(test_oid c3) s/11/B/ | |
253 | a => b | 0 | |
254 | 1 file changed, 0 insertions(+), 0 deletions(-) | |
255 | 4: $(test_oid t4) ! 4: $(test_oid c4) s/12/B/ | |
256 | a => b | 0 | |
257 | 1 file changed, 0 insertions(+), 0 deletions(-) | |
258 | EOF | |
259 | test_cmp expected actual | |
260 | ' | |
261 | ||
262 | test_expect_success 'changed commit with sm config' ' | |
263 | git range-diff --no-color --submodule=log topic...changed >actual && | |
264 | cat >expected <<-EOF && | |
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/ | |
268 | @@ file: A | |
269 | 9 | |
270 | 10 | |
271 | -11 | |
272 | -+B | |
273 | ++BB | |
274 | 12 | |
275 | 13 | |
276 | 14 | |
277 | 4: $(test_oid t4) ! 4: $(test_oid c4) s/12/B/ | |
278 | @@ file | |
279 | @@ file: A | |
280 | 9 | |
281 | 10 | |
282 | - B | |
283 | + BB | |
284 | -12 | |
285 | +B | |
286 | 13 | |
287 | EOF | |
288 | test_cmp expected actual | |
289 | ' | |
290 | ||
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 && | |
294 | 1: $(test_oid t1) = 1: $(test_oid n1) s/5/A/ | |
295 | 2: $(test_oid t2) ! 2: $(test_oid n2) s/4/A/ | |
296 | @@ Metadata | |
297 | ZAuthor: Thomas Rast <trast@inf.ethz.ch> | |
298 | Z | |
299 | Z ## Commit message ## | |
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 | |
308 | 3: $(test_oid t3) ! 3: $(test_oid n3) s/11/B/ | |
309 | @@ Metadata | |
310 | Z ## Commit message ## | |
311 | Z s/11/B/ | |
312 | Z | |
313 | - ## file ## | |
314 | -@@ file: A | |
315 | + ## renamed-file ## | |
316 | +@@ renamed-file: A | |
317 | Z 8 | |
318 | Z 9 | |
319 | Z 10 | |
320 | 4: $(test_oid t4) ! 4: $(test_oid n4) s/12/B/ | |
321 | @@ Metadata | |
322 | Z ## Commit message ## | |
323 | Z s/12/B/ | |
324 | Z | |
325 | - ## file ## | |
326 | -@@ file: A | |
327 | + ## renamed-file ## | |
328 | +@@ renamed-file: A | |
329 | Z 9 | |
330 | Z 10 | |
331 | Z B | |
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 && | |
339 | 1: $(test_oid t1) = 1: $(test_oid s1) s/5/A/ | |
340 | 2: $(test_oid t2) ! 2: $(test_oid s2) s/4/A/ | |
341 | @@ Metadata | |
342 | ZAuthor: Thomas Rast <trast@inf.ethz.ch> | |
343 | Z | |
344 | Z ## Commit message ## | |
345 | - s/4/A/ | |
346 | + s/4/A/ + new-file | |
347 | Z | |
348 | Z ## file ## | |
349 | Z@@ | |
350 | @@ file | |
351 | Z A | |
352 | Z 6 | |
353 | Z 7 | |
354 | + | |
355 | + ## new-file (new) ## | |
356 | 3: $(test_oid t3) ! 3: $(test_oid s3) s/11/B/ | |
357 | @@ Metadata | |
358 | ZAuthor: Thomas Rast <trast@inf.ethz.ch> | |
359 | Z | |
360 | Z ## Commit message ## | |
361 | - s/11/B/ | |
362 | + s/11/B/ + remove file | |
363 | Z | |
364 | Z ## file ## | |
365 | Z@@ file: A | |
366 | @@ file: A | |
367 | Z 12 | |
368 | Z 13 | |
369 | Z 14 | |
370 | + | |
371 | + ## new-file (deleted) ## | |
372 | 4: $(test_oid t4) = 4: $(test_oid s4) s/12/B/ | |
373 | EOF | |
374 | test_cmp expected actual | |
375 | ' | |
376 | ||
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 | ||
382 | test_expect_success 'changed message' ' | |
383 | git range-diff --no-color topic...changed-message >actual && | |
384 | sed s/Z/\ /g >expected <<-EOF && | |
385 | 1: $(test_oid t1) = 1: $(test_oid m1) s/5/A/ | |
386 | 2: $(test_oid t2) ! 2: $(test_oid m2) s/4/A/ | |
387 | @@ Metadata | |
388 | Z ## Commit message ## | |
389 | Z s/4/A/ | |
390 | Z | |
391 | + Also a silly comment here! | |
392 | + | |
393 | Z ## file ## | |
394 | Z@@ | |
395 | Z 1 | |
396 | 3: $(test_oid t3) = 3: $(test_oid m3) s/11/B/ | |
397 | 4: $(test_oid t4) = 4: $(test_oid m4) s/12/B/ | |
398 | EOF | |
399 | test_cmp expected actual | |
400 | ' | |
401 | ||
402 | test_expect_success 'dual-coloring' ' | |
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> | |
406 | : <REVERSE><CYAN>@@<RESET> <RESET>Metadata<RESET> | |
407 | : ## Commit message ##<RESET> | |
408 | : s/4/A/<RESET> | |
409 | : <RESET> | |
410 | : <REVERSE><GREEN>+<RESET><BOLD> Also a silly comment here!<RESET> | |
411 | : <REVERSE><GREEN>+<RESET> | |
412 | : ## file ##<RESET> | |
413 | : <CYAN> @@<RESET> | |
414 | : 1<RESET> | |
415 | :<RED>3: $(test_oid c3) <RESET><YELLOW>!<RESET><GREEN> 3: $(test_oid m3)<RESET><YELLOW> s/11/B/<RESET> | |
416 | : <REVERSE><CYAN>@@<RESET> <RESET>file: A<RESET> | |
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> | |
425 | :<RED>4: $(test_oid c4) <RESET><YELLOW>!<RESET><GREEN> 4: $(test_oid m4)<RESET><YELLOW> s/12/B/<RESET> | |
426 | : <REVERSE><CYAN>@@<RESET> <RESET>file<RESET> | |
427 | : <CYAN> @@ file: A<RESET> | |
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 | ||
441 | for prev in topic master..topic | |
442 | do | |
443 | test_expect_success "format-patch --range-diff=$prev" ' | |
444 | git format-patch --cover-letter --range-diff=$prev \ | |
445 | master..unmodified >actual && | |
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-* | |
453 | ' | |
454 | done | |
455 | ||
456 | test_expect_success 'format-patch --range-diff as commentary' ' | |
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-* | |
462 | ' | |
463 | ||
464 | test_expect_success 'range-diff overrides diff.noprefix internally' ' | |
465 | git -c diff.noprefix=true range-diff HEAD^... | |
466 | ' | |
467 | ||
468 | test_done |