summaryrefslogtreecommitdiff
path: root/t/t4200-rerere.sh
blob: c571a1bd744582c6be68504887cf8620514603b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#!/bin/sh
#
# Copyright (c) 2006 Johannes E. Schindelin
#

test_description='git-rerere
'

. ./test-lib.sh

cat > a1 << EOF
Whether 'tis nobler in the mind to suffer
The slings and arrows of outrageous fortune,
Or to take arms against a sea of troubles,
And by opposing end them? To die: to sleep;
No more; and by a sleep to say we end
The heart-ache and the thousand natural shocks
That flesh is heir to, 'tis a consummation
Devoutly to be wish'd.
EOF

git add a1
git commit -q -a -m initial

git checkout -b first
cat >> a1 << EOF
To die, to sleep;
To sleep: perchance to dream: ay, there's the rub;
For in that sleep of death what dreams may come
When we have shuffled off this mortal coil,
Must give us pause: there's the respect
That makes calamity of so long life;
EOF
git commit -q -a -m first

git checkout -b second master
git show first:a1 | sed 's/To die, t/To die! T/' > a1
git commit -q -a -m second

# activate rerere
mkdir .git/rr-cache

test_expect_failure 'conflicting merge' 'git pull . first'

sha1=4f58849a60b4f969a2848966b6d02893b783e8fb
rr=.git/rr-cache/$sha1
test_expect_success 'recorded preimage' "grep ======= $rr/preimage"

test_expect_success 'no postimage or thisimage yet' \
	"test ! -f $rr/postimage -a ! -f $rr/thisimage"

git show first:a1 > a1

cat > expect << EOF
--- a/a1
+++ b/a1
@@ -6,11 +6,7 @@
 The heart-ache and the thousand natural shocks
 That flesh is heir to, 'tis a consummation
 Devoutly to be wish'd.
-<<<<<<<
-To die! To sleep;
-=======
 To die, to sleep;
->>>>>>>
 To sleep: perchance to dream: ay, there's the rub;
 For in that sleep of death what dreams may come
 When we have shuffled off this mortal coil,
EOF

git rerere diff > out

test_expect_success 'rerere diff' 'diff -u expect out'

cat > expect << EOF
a1
EOF

git rerere status > out

test_expect_success 'rerere status' 'diff -u expect out'

test_expect_success 'commit succeeds' \
	"git commit -q -a -m 'prefer first over second'"

test_expect_success 'recorded postimage' "test -f $rr/postimage"

git checkout -b third master
git show second^:a1 | sed 's/To die: t/To die! T/' > a1
git commit -q -a -m third

test_expect_failure 'another conflicting merge' 'git pull . first'

git show first:a1 | sed 's/To die: t/To die! T/' > expect
test_expect_success 'rerere kicked in' "! grep ======= a1"

test_expect_success 'rerere prefers first change' 'diff -u a1 expect'

rm $rr/postimage
echo "$sha1	a1" | tr '\012' '\0' > .git/rr-cache/MERGE_RR

test_expect_success 'rerere clear' 'git rerere clear'

test_expect_success 'clear removed the directory' "test ! -d $rr"

mkdir $rr
echo Hello > $rr/preimage
echo World > $rr/postimage

sha2=4000000000000000000000000000000000000000
rr2=.git/rr-cache/$sha2
mkdir $rr2
echo Hello > $rr2/preimage

case "$(date -d @11111111 +%s 2>/dev/null)" in
11111111)
	# 'date' must be able to take arbitrary input with @11111111 notation.
	# for this test to succeed.  We should fix this part using more
	# portable script someday.

	now=$(date +%s)
	almost_15_days_ago=$(($now+60-15*86400))
	just_over_15_days_ago=$(($now-1-15*86400))
	almost_60_days_ago=$(($now+60-60*86400))
	just_over_60_days_ago=$(($now-1-60*86400))
	predate1="$(date -d "@$almost_60_days_ago" +%Y%m%d%H%M.%S)"
	predate2="$(date -d "@$almost_15_days_ago" +%Y%m%d%H%M.%S)"
	postdate1="$(date -d "@$just_over_60_days_ago" +%Y%m%d%H%M.%S)"
	postdate2="$(date -d "@$just_over_15_days_ago" +%Y%m%d%H%M.%S)"

	touch -m -t "$predate1" $rr/preimage
	touch -m -t "$predate2" $rr2/preimage

	test_expect_success 'garbage collection (part1)' 'git rerere gc'

	test_expect_success 'young records still live' \
		"test -f $rr/preimage -a -f $rr2/preimage"

	touch -m -t "$postdate1" $rr/preimage
	touch -m -t "$postdate2" $rr2/preimage

	test_expect_success 'garbage collection (part2)' 'git rerere gc'

	test_expect_success 'old records rest in peace' \
		"test ! -f $rr/preimage -a ! -f $rr2/preimage"
	;;
esac

test_done