]>
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 | |
12 | Whether 'tis nobler in the mind to suffer | |
13 | The slings and arrows of outrageous fortune, | |
14 | Or to take arms against a sea of troubles, | |
15 | And by opposing end them? To die: to sleep; | |
16 | No more; and by a sleep to say we end | |
17 | The heart-ache and the thousand natural shocks | |
18 | That flesh is heir to, 'tis a consummation | |
19 | Devoutly to be wish'd. | |
20 | EOF | |
21 | ||
22 | git add a1 | |
23 | git commit -q -a -m initial | |
24 | ||
25 | git checkout -b first | |
26 | cat >> a1 << EOF | |
27 | To die, to sleep; | |
28 | To sleep: perchance to dream: ay, there's the rub; | |
29 | For in that sleep of death what dreams may come | |
30 | When we have shuffled off this mortal coil, | |
31 | Must give us pause: there's the respect | |
32 | That makes calamity of so long life; | |
33 | EOF | |
34 | git commit -q -a -m first | |
35 | ||
36 | git checkout -b second master | |
eb335966 | 37 | git show first:a1 | |
2b93edbf JH |
38 | sed -e 's/To die, t/To die! T/' > a1 |
39 | echo "* END *" >>a1 | |
ad8e72cb JS |
40 | git commit -q -a -m second |
41 | ||
b4372ef1 JS |
42 | test_expect_success 'nothing recorded without rerere' ' |
43 | (rm -rf .git/rr-cache; git config rerere.enabled false) && | |
44 | ! git merge first && | |
45 | ! test -d .git/rr-cache | |
46 | ' | |
ad8e72cb | 47 | |
b4372ef1 JS |
48 | # activate rerere, old style |
49 | test_expect_success 'conflicting merge' ' | |
50 | git reset --hard && | |
51 | mkdir .git/rr-cache && | |
52 | git config --unset rerere.enabled && | |
53 | ! git merge first | |
54 | ' | |
ad8e72cb | 55 | |
c256acb8 | 56 | sha1=$(sed -e 's/ .*//' .git/rr-cache/MERGE_RR) |
ad8e72cb JS |
57 | rr=.git/rr-cache/$sha1 |
58 | test_expect_success 'recorded preimage' "grep ======= $rr/preimage" | |
59 | ||
b4372ef1 JS |
60 | test_expect_success 'rerere.enabled works, too' ' |
61 | rm -rf .git/rr-cache && | |
62 | git config rerere.enabled true && | |
63 | git reset --hard && | |
64 | ! git merge first && | |
65 | grep ======= $rr/preimage | |
66 | ' | |
67 | ||
ad8e72cb JS |
68 | test_expect_success 'no postimage or thisimage yet' \ |
69 | "test ! -f $rr/postimage -a ! -f $rr/thisimage" | |
70 | ||
364b8523 | 71 | test_expect_success 'preimage has right number of lines' ' |
eb335966 JH |
72 | |
73 | cnt=$(sed -ne "/^<<<<<<</,/^>>>>>>>/p" $rr/preimage | wc -l) && | |
2b93edbf | 74 | test $cnt = 9 |
eb335966 JH |
75 | |
76 | ' | |
77 | ||
ad8e72cb JS |
78 | git show first:a1 > a1 |
79 | ||
80 | cat > expect << EOF | |
81 | --- a/a1 | |
82 | +++ b/a1 | |
eb335966 | 83 | @@ -6,17 +6,9 @@ |
ad8e72cb JS |
84 | The heart-ache and the thousand natural shocks |
85 | That flesh is heir to, 'tis a consummation | |
86 | Devoutly to be wish'd. | |
87 | -<<<<<<< | |
88 | -To die! To sleep; | |
89 | -======= | |
90 | To die, to sleep; | |
91 | ->>>>>>> | |
92 | To sleep: perchance to dream: ay, there's the rub; | |
93 | For in that sleep of death what dreams may come | |
94 | When we have shuffled off this mortal coil, | |
eb335966 | 95 | Must give us pause: there's the respect |
2b93edbf | 96 | That makes calamity of so long life; |
eb335966 | 97 | -<<<<<<< |
eb335966 | 98 | -======= |
2b93edbf | 99 | -* END * |
eb335966 | 100 | ->>>>>>> |
ad8e72cb | 101 | EOF |
ad8e72cb JS |
102 | git rerere diff > out |
103 | ||
5bd74506 | 104 | test_expect_success 'rerere diff' 'git diff expect out' |
ad8e72cb JS |
105 | |
106 | cat > expect << EOF | |
107 | a1 | |
108 | EOF | |
109 | ||
110 | git rerere status > out | |
111 | ||
5bd74506 | 112 | test_expect_success 'rerere status' 'git diff expect out' |
ad8e72cb JS |
113 | |
114 | test_expect_success 'commit succeeds' \ | |
115 | "git commit -q -a -m 'prefer first over second'" | |
116 | ||
117 | test_expect_success 'recorded postimage' "test -f $rr/postimage" | |
118 | ||
119 | git checkout -b third master | |
120 | git show second^:a1 | sed 's/To die: t/To die! T/' > a1 | |
121 | git commit -q -a -m third | |
122 | ||
123 | test_expect_failure 'another conflicting merge' 'git pull . first' | |
124 | ||
125 | git show first:a1 | sed 's/To die: t/To die! T/' > expect | |
126 | test_expect_success 'rerere kicked in' "! grep ======= a1" | |
127 | ||
5bd74506 | 128 | test_expect_success 'rerere prefers first change' 'git diff a1 expect' |
ad8e72cb JS |
129 | |
130 | rm $rr/postimage | |
131 | echo "$sha1 a1" | tr '\012' '\0' > .git/rr-cache/MERGE_RR | |
132 | ||
133 | test_expect_success 'rerere clear' 'git rerere clear' | |
134 | ||
135 | test_expect_success 'clear removed the directory' "test ! -d $rr" | |
136 | ||
137 | mkdir $rr | |
138 | echo Hello > $rr/preimage | |
139 | echo World > $rr/postimage | |
140 | ||
141 | sha2=4000000000000000000000000000000000000000 | |
142 | rr2=.git/rr-cache/$sha2 | |
143 | mkdir $rr2 | |
144 | echo Hello > $rr2/preimage | |
145 | ||
56cf9806 EW |
146 | almost_15_days_ago=$((60-15*86400)) |
147 | just_over_15_days_ago=$((-1-15*86400)) | |
148 | almost_60_days_ago=$((60-60*86400)) | |
149 | just_over_60_days_ago=$((-1-60*86400)) | |
150 | ||
151 | test-chmtime =$almost_60_days_ago $rr/preimage | |
152 | test-chmtime =$almost_15_days_ago $rr2/preimage | |
153 | ||
154 | test_expect_success 'garbage collection (part1)' 'git rerere gc' | |
155 | ||
156 | test_expect_success 'young records still live' \ | |
157 | "test -f $rr/preimage && test -f $rr2/preimage" | |
158 | ||
159 | test-chmtime =$just_over_60_days_ago $rr/preimage | |
160 | test-chmtime =$just_over_15_days_ago $rr2/preimage | |
161 | ||
162 | test_expect_success 'garbage collection (part2)' 'git rerere gc' | |
163 | ||
164 | test_expect_success 'old records rest in peace' \ | |
165 | "test ! -f $rr/preimage && test ! -f $rr2/preimage" | |
ad8e72cb JS |
166 | |
167 | test_done |