log -L: test merge of parallel modify/rename

This tests a toy example of a history like * Merge | \ | * Modify foo | | * | Rename foo->bar | / * Create foo Current log -L fails on this; we'll fix it in the next commit. Signed-off-by: Thomas Rast <trast@inf.ethz.ch> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Thomas Rast committed Apr 12, 2013 at 18:05 UTC d51c5274e458e9c2545144b6821978ccda85c117
3 files changed +250 -6
t/t4211-line-log.sh
+12 -4
@@ -8,13 +8,20 @@ test_expect_success 'setup (import history)' '
8 git reset --hard
9 '
10
11 -canned_test () {
12 - test_expect_success "$1" "
13 - git log $1 >actual &&
14 - test_cmp \"\$TEST_DIRECTORY\"/t4211/expect.$2 actual
11 +canned_test_1 () {
12 + test_expect_$1 "$2" "
13 + git log $2 >actual &&
14 + test_cmp \"\$TEST_DIRECTORY\"/t4211/expect.$3 actual
15 "
16 }
17
18 +canned_test () {
19 + canned_test_1 success "$@"
20 +}
21 +canned_test_failure () {
22 + canned_test_1 failure "$@"
23 +}
24 +
25 test_bad_opts () {
26 test_expect_success "invalid args: $1" "
27 test_must_fail git log $1 2>errors &&
@@ -38,6 +45,7 @@ canned_test "-L '/long f/',/^}/:a.c -L /main/,/^}/:a.c simple" two-ranges
45 canned_test "-L 24,+1:a.c simple" vanishes-early
46
47 canned_test "-M -L '/long f/,/^}/:b.c' move-support" move-support-f
48 +canned_test_failure "-M -L ':f:b.c' parallel-change" parallel-change-f-to-main
49
50 canned_test "-L 4,12:a.c -L :main:a.c simple" multiple
51 canned_test "-L 4,18:a.c -L :main:a.c simple" multiple-overlapping
t/t4211/expect.parallel-change-f-to-main new
+160
@@ -0,0 +1,160 @@
1 +commit 0469c60bc4837d52d97b1f081dec5f98dea20fed
2 +Merge: ba227c6 6ce3c4f
3 +Author: Thomas Rast <trast@inf.ethz.ch>
4 +Date: Fri Apr 12 16:16:24 2013 +0200
5 +
6 + Merge across the rename
7 +
8 +
9 +commit 6ce3c4ff690136099bb17e1a8766b75764726ea7
10 +Author: Thomas Rast <trast@student.ethz.ch>
11 +Date: Thu Feb 28 10:49:50 2013 +0100
12 +
13 + another simple change
14 +
15 +diff --git a/b.c b/b.c
16 +--- a/b.c
17 ++++ b/b.c
18 +@@ -4,14 +4,14 @@
19 + long f(long x)
20 + {
21 + int s = 0;
22 + while (x) {
23 +- x >>= 1;
24 ++ x /= 2;
25 + s++;
26 + }
27 + return s;
28 + }
29 +
30 + /*
31 + * This is only an example!
32 + */
33 +
34 +
35 +commit ba227c6632349700fbb957dec2b50f5e2358be3f
36 +Author: Thomas Rast <trast@inf.ethz.ch>
37 +Date: Fri Apr 12 16:15:57 2013 +0200
38 +
39 + change on another line of history while rename happens
40 +
41 +diff --git a/a.c b/a.c
42 +--- a/a.c
43 ++++ b/a.c
44 +@@ -4,14 +4,14 @@
45 + long f(long x)
46 + {
47 + int s = 0;
48 + while (x) {
49 + x >>= 1;
50 + s++;
51 + }
52 + return s;
53 + }
54 +
55 + /*
56 +- * This is only an example!
57 ++ * This is only a short example!
58 + */
59 +
60 +
61 +commit 39b6eb2d5b706d3322184a169f666f25ed3fbd00
62 +Author: Thomas Rast <trast@student.ethz.ch>
63 +Date: Thu Feb 28 10:45:41 2013 +0100
64 +
65 + touch comment
66 +
67 +diff --git a/a.c b/a.c
68 +--- a/a.c
69 ++++ b/a.c
70 +@@ -3,14 +3,14 @@
71 + long f(long x)
72 + {
73 + int s = 0;
74 + while (x) {
75 + x >>= 1;
76 + s++;
77 + }
78 + return s;
79 + }
80 +
81 + /*
82 +- * A comment.
83 ++ * This is only an example!
84 + */
85 +
86 +
87 +commit a6eb82647d5d67f893da442f8f9375fd89a3b1e2
88 +Author: Thomas Rast <trast@student.ethz.ch>
89 +Date: Thu Feb 28 10:45:16 2013 +0100
90 +
91 + touch both functions
92 +
93 +diff --git a/a.c b/a.c
94 +--- a/a.c
95 ++++ b/a.c
96 +@@ -3,14 +3,14 @@
97 +-int f(int x)
98 ++long f(long x)
99 + {
100 + int s = 0;
101 + while (x) {
102 + x >>= 1;
103 + s++;
104 + }
105 + return s;
106 + }
107 +
108 + /*
109 + * A comment.
110 + */
111 +
112 +
113 +commit f04fb20f2c77850996cba739709acc6faecc58f7
114 +Author: Thomas Rast <trast@student.ethz.ch>
115 +Date: Thu Feb 28 10:44:55 2013 +0100
116 +
117 + change f()
118 +
119 +diff --git a/a.c b/a.c
120 +--- a/a.c
121 ++++ b/a.c
122 +@@ -3,13 +3,14 @@
123 + int f(int x)
124 + {
125 + int s = 0;
126 + while (x) {
127 + x >>= 1;
128 + s++;
129 + }
130 ++ return s;
131 + }
132 +
133 + /*
134 + * A comment.
135 + */
136 +
137 +
138 +commit de4c48ae814792c02a49c4c3c0c757ae69c55f6a
139 +Author: Thomas Rast <trast@student.ethz.ch>
140 +Date: Thu Feb 28 10:44:48 2013 +0100
141 +
142 + initial
143 +
144 +diff --git a/a.c b/a.c
145 +--- /dev/null
146 ++++ b/a.c
147 +@@ -0,0 +3,13 @@
148 ++int f(int x)
149 ++{
150 ++ int s = 0;
151 ++ while (x) {
152 ++ x >>= 1;
153 ++ s++;
154 ++ }
155 ++}
156 ++
157 ++/*
158 ++ * A comment.
159 ++ */
160 ++
t/t4211/history.export
+78 -2
@@ -325,6 +325,82 @@ move within the file
325 from :17
326 M 100644 :18 b.c
327
328 -reset refs/heads/master
329 -from :19
328 +blob
329 +mark :20
330 +data 243
331 +#include <unistd.h>
332 +#include <stdio.h>
333 +
334 +long f(long x)
335 +{
336 + int s = 0;
337 + while (x) {
338 + x >>= 1;
339 + s++;
340 + }
341 + return s;
342 +}
343 +
344 +/*
345 + * This is only a short example!
346 + */
347 +
348 +int main ()
349 +{
350 + printf("%ld\n", f(15));
351 + return 0;
352 +}
353 +
354 +/* incomplete lines are bad! */
355 +
356 +commit refs/heads/parallel-change
357 +mark :21
358 +author Thomas Rast <trast@inf.ethz.ch> 1365776157 +0200
359 +committer Thomas Rast <trast@inf.ethz.ch> 1365776157 +0200
360 +data 55
361 +change on another line of history while rename happens
362 +from :14
363 +M 100644 :20 a.c
364 +
365 +blob
366 +mark :22
367 +data 242
368 +#include <unistd.h>
369 +#include <stdio.h>
370 +
371 +long f(long x)
372 +{
373 + int s = 0;
374 + while (x) {
375 + x /= 2;
376 + s++;
377 + }
378 + return s;
379 +}
380 +
381 +/*
382 + * This is only a short example!
383 + */
384 +
385 +int main ()
386 +{
387 + printf("%ld\n", f(15));
388 + return 0;
389 +}
390 +
391 +/* incomplete lines are bad! */
392 +
393 +commit refs/heads/parallel-change
394 +mark :23
395 +author Thomas Rast <trast@inf.ethz.ch> 1365776184 +0200
396 +committer Thomas Rast <trast@inf.ethz.ch> 1365776191 +0200
397 +data 24
398 +Merge across the rename
399 +from :21
400 +merge :17
401 +D a.c
402 +M 100644 :22 b.c
403 +
404 +reset refs/heads/parallel-change
405 +from :23
406