]>
Commit | Line | Data |
---|---|---|
ad8e72cb JS |
1 | #!/bin/sh |
2 | # | |
3 | # Copyright (c) 2006 Johannes E. Schindelin | |
4 | # | |
5 | ||
5be60078 | 6 | test_description='git rerere |
ad8e72cb JS |
7 | ' |
8 | ||
9 | . ./test-lib.sh | |
10 | ||
11 | cat > a1 << EOF | |
99d698f1 OM |
12 | Some title |
13 | ========== | |
ad8e72cb JS |
14 | Whether 'tis nobler in the mind to suffer |
15 | The slings and arrows of outrageous fortune, | |
16 | Or to take arms against a sea of troubles, | |
17 | And by opposing end them? To die: to sleep; | |
18 | No more; and by a sleep to say we end | |
19 | The heart-ache and the thousand natural shocks | |
20 | That flesh is heir to, 'tis a consummation | |
21 | Devoutly to be wish'd. | |
22 | EOF | |
23 | ||
24 | git add a1 | |
25 | git commit -q -a -m initial | |
26 | ||
27 | git checkout -b first | |
28 | cat >> a1 << EOF | |
99d698f1 OM |
29 | Some title |
30 | ========== | |
ad8e72cb JS |
31 | To die, to sleep; |
32 | To sleep: perchance to dream: ay, there's the rub; | |
33 | For in that sleep of death what dreams may come | |
34 | When we have shuffled off this mortal coil, | |
35 | Must give us pause: there's the respect | |
36 | That makes calamity of so long life; | |
37 | EOF | |
38 | git commit -q -a -m first | |
39 | ||
40 | git checkout -b second master | |
eb335966 | 41 | git show first:a1 | |
99d698f1 | 42 | sed -e 's/To die, t/To die! T/' -e 's/Some title/Some Title/' > a1 |
2b93edbf | 43 | echo "* END *" >>a1 |
ad8e72cb JS |
44 | git commit -q -a -m second |
45 | ||
b4372ef1 JS |
46 | test_expect_success 'nothing recorded without rerere' ' |
47 | (rm -rf .git/rr-cache; git config rerere.enabled false) && | |
d492b31c | 48 | test_must_fail git merge first && |
b4372ef1 JS |
49 | ! test -d .git/rr-cache |
50 | ' | |
ad8e72cb | 51 | |
b4372ef1 JS |
52 | # activate rerere, old style |
53 | test_expect_success 'conflicting merge' ' | |
54 | git reset --hard && | |
55 | mkdir .git/rr-cache && | |
56 | git config --unset rerere.enabled && | |
d492b31c | 57 | test_must_fail git merge first |
b4372ef1 | 58 | ' |
ad8e72cb | 59 | |
5e16488e | 60 | sha1=$(perl -pe 's/ .*//' .git/MERGE_RR) |
ad8e72cb | 61 | rr=.git/rr-cache/$sha1 |
99d698f1 | 62 | test_expect_success 'recorded preimage' "grep ^=======$ $rr/preimage" |
ad8e72cb | 63 | |
b4372ef1 JS |
64 | test_expect_success 'rerere.enabled works, too' ' |
65 | rm -rf .git/rr-cache && | |
66 | git config rerere.enabled true && | |
67 | git reset --hard && | |
d492b31c | 68 | test_must_fail git merge first && |
99d698f1 | 69 | grep ^=======$ $rr/preimage |
b4372ef1 JS |
70 | ' |
71 | ||
ad8e72cb JS |
72 | test_expect_success 'no postimage or thisimage yet' \ |
73 | "test ! -f $rr/postimage -a ! -f $rr/thisimage" | |
74 | ||
364b8523 | 75 | test_expect_success 'preimage has right number of lines' ' |
eb335966 JH |
76 | |
77 | cnt=$(sed -ne "/^<<<<<<</,/^>>>>>>>/p" $rr/preimage | wc -l) && | |
99d698f1 | 78 | test $cnt = 13 |
eb335966 JH |
79 | |
80 | ' | |
81 | ||
ad8e72cb JS |
82 | git show first:a1 > a1 |
83 | ||
84 | cat > expect << EOF | |
85 | --- a/a1 | |
86 | +++ b/a1 | |
99d698f1 OM |
87 | @@ -1,4 +1,4 @@ |
88 | -Some Title | |
89 | +Some title | |
90 | ========== | |
91 | Whether 'tis nobler in the mind to suffer | |
92 | The slings and arrows of outrageous fortune, | |
93 | @@ -8,21 +8,11 @@ | |
ad8e72cb JS |
94 | The heart-ache and the thousand natural shocks |
95 | That flesh is heir to, 'tis a consummation | |
96 | Devoutly to be wish'd. | |
97 | -<<<<<<< | |
99d698f1 OM |
98 | -Some Title |
99 | -========== | |
ad8e72cb JS |
100 | -To die! To sleep; |
101 | -======= | |
99d698f1 OM |
102 | Some title |
103 | ========== | |
ad8e72cb JS |
104 | To die, to sleep; |
105 | ->>>>>>> | |
106 | To sleep: perchance to dream: ay, there's the rub; | |
107 | For in that sleep of death what dreams may come | |
108 | When we have shuffled off this mortal coil, | |
eb335966 | 109 | Must give us pause: there's the respect |
2b93edbf | 110 | That makes calamity of so long life; |
eb335966 | 111 | -<<<<<<< |
eb335966 | 112 | -======= |
2b93edbf | 113 | -* END * |
eb335966 | 114 | ->>>>>>> |
ad8e72cb | 115 | EOF |
ad8e72cb JS |
116 | git rerere diff > out |
117 | ||
3af82863 | 118 | test_expect_success 'rerere diff' 'test_cmp expect out' |
ad8e72cb JS |
119 | |
120 | cat > expect << EOF | |
121 | a1 | |
122 | EOF | |
123 | ||
124 | git rerere status > out | |
125 | ||
3af82863 | 126 | test_expect_success 'rerere status' 'test_cmp expect out' |
ad8e72cb JS |
127 | |
128 | test_expect_success 'commit succeeds' \ | |
129 | "git commit -q -a -m 'prefer first over second'" | |
130 | ||
131 | test_expect_success 'recorded postimage' "test -f $rr/postimage" | |
132 | ||
52aaf649 JS |
133 | test_expect_success 'another conflicting merge' ' |
134 | git checkout -b third master && | |
135 | git show second^:a1 | sed "s/To die: t/To die! T/" > a1 && | |
136 | git commit -q -a -m third && | |
d492b31c | 137 | test_must_fail git pull . first |
52aaf649 | 138 | ' |
ad8e72cb JS |
139 | |
140 | git show first:a1 | sed 's/To die: t/To die! T/' > expect | |
99d698f1 | 141 | test_expect_success 'rerere kicked in' "! grep ^=======$ a1" |
ad8e72cb | 142 | |
3af82863 | 143 | test_expect_success 'rerere prefers first change' 'test_cmp a1 expect' |
ad8e72cb JS |
144 | |
145 | rm $rr/postimage | |
0af0ac7e | 146 | echo "$sha1 a1" | perl -pe 'y/\012/\000/' > .git/MERGE_RR |
ad8e72cb JS |
147 | |
148 | test_expect_success 'rerere clear' 'git rerere clear' | |
149 | ||
150 | test_expect_success 'clear removed the directory' "test ! -d $rr" | |
151 | ||
152 | mkdir $rr | |
153 | echo Hello > $rr/preimage | |
154 | echo World > $rr/postimage | |
155 | ||
156 | sha2=4000000000000000000000000000000000000000 | |
157 | rr2=.git/rr-cache/$sha2 | |
158 | mkdir $rr2 | |
159 | echo Hello > $rr2/preimage | |
160 | ||
56cf9806 EW |
161 | almost_15_days_ago=$((60-15*86400)) |
162 | just_over_15_days_ago=$((-1-15*86400)) | |
163 | almost_60_days_ago=$((60-60*86400)) | |
164 | just_over_60_days_ago=$((-1-60*86400)) | |
165 | ||
166 | test-chmtime =$almost_60_days_ago $rr/preimage | |
167 | test-chmtime =$almost_15_days_ago $rr2/preimage | |
168 | ||
169 | test_expect_success 'garbage collection (part1)' 'git rerere gc' | |
170 | ||
171 | test_expect_success 'young records still live' \ | |
172 | "test -f $rr/preimage && test -f $rr2/preimage" | |
173 | ||
174 | test-chmtime =$just_over_60_days_ago $rr/preimage | |
175 | test-chmtime =$just_over_15_days_ago $rr2/preimage | |
176 | ||
177 | test_expect_success 'garbage collection (part2)' 'git rerere gc' | |
178 | ||
179 | test_expect_success 'old records rest in peace' \ | |
180 | "test ! -f $rr/preimage && test ! -f $rr2/preimage" | |
ad8e72cb | 181 | |
52aaf649 JS |
182 | test_expect_success 'file2 added differently in two branches' ' |
183 | git reset --hard && | |
184 | git checkout -b fourth && | |
185 | echo Hallo > file2 && | |
186 | git add file2 && | |
187 | git commit -m version1 && | |
188 | git checkout third && | |
189 | echo Bello > file2 && | |
190 | git add file2 && | |
191 | git commit -m version2 && | |
d492b31c | 192 | test_must_fail git merge fourth && |
52aaf649 JS |
193 | echo Cello > file2 && |
194 | git add file2 && | |
195 | git commit -m resolution | |
196 | ' | |
197 | ||
198 | test_expect_success 'resolution was recorded properly' ' | |
199 | git reset --hard HEAD~2 && | |
200 | git checkout -b fifth && | |
201 | echo Hallo > file3 && | |
202 | git add file3 && | |
203 | git commit -m version1 && | |
204 | git checkout third && | |
205 | echo Bello > file3 && | |
206 | git add file3 && | |
207 | git commit -m version2 && | |
121c813f | 208 | git tag version2 && |
7f8365f8 JH |
209 | test_must_fail git merge fifth && |
210 | test Cello = "$(cat file3)" && | |
211 | test 0 != $(git ls-files -u | wc -l) | |
52aaf649 JS |
212 | ' |
213 | ||
121c813f JH |
214 | test_expect_success 'rerere.autoupdate' ' |
215 | git config rerere.autoupdate true | |
216 | git reset --hard && | |
217 | git checkout version2 && | |
218 | test_must_fail git merge fifth && | |
219 | test 0 = $(git ls-files -u | wc -l) | |
220 | ||
221 | ' | |
222 | ||
ad8e72cb | 223 | test_done |