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