t4200 (rerere): modernize style

Guard all test code with test_expect_success to make the
script easier to follow.  While at it, pick some other nits:

 - use test_tick (more than we have to, to be realistic);

 - 'single quotes' and \escaped HERE documents where possible
   simplify review for escaping problems;

 - omit whitespace after >redirection operators for
   consistency with other tests;

 - use "update-index --refresh" instead of testing that
   "ls-files -u" output is empty, since the former produces
   nicer output on failure;

 - compare to expected nonempty "ls-files -u" output instead
   of counting lines when it is expected to be nonempty.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jonathan Nieder 2010-08-05 06:25:34 -05:00 committed by Junio C Hamano
parent 18b037a5b6
commit f7314882c2

View File

@ -4,98 +4,133 @@
# #
test_description='git rerere test_description='git rerere
! [fifth] version1
! [first] first
! [fourth] version1
! [master] initial
! [second] prefer first over second
! [third] version2
------
+ [third] version2
+ [fifth] version1
+ [fourth] version1
+ + + [third^] third
- [second] prefer first over second
+ + [first] first
+ [second^] second
++++++ [master] initial
' '
. ./test-lib.sh . ./test-lib.sh
test_expect_success 'setup' " test_expect_success 'setup' '
cat > a1 <<- EOF && cat >a1 <<-\EOF &&
Some title Some title
========== ==========
Whether 'tis nobler in the mind to suffer Whether '\''tis nobler in the mind to suffer
The slings and arrows of outrageous fortune, The slings and arrows of outrageous fortune,
Or to take arms against a sea of troubles, Or to take arms against a sea of troubles,
And by opposing end them? To die: to sleep; And by opposing end them? To die: to sleep;
No more; and by a sleep to say we end No more; and by a sleep to say we end
The heart-ache and the thousand natural shocks The heart-ache and the thousand natural shocks
That flesh is heir to, 'tis a consummation That flesh is heir to, '\''tis a consummation
Devoutly to be wish'd. Devoutly to be wish'\''d.
EOF EOF
git add a1 && git add a1 &&
test_tick &&
git commit -q -a -m initial && git commit -q -a -m initial &&
git checkout -b first && cat >>a1 <<-\EOF &&
cat >> a1 <<- EOF &&
Some title Some title
========== ==========
To die, to sleep; To die, to sleep;
To sleep: perchance to dream: ay, there's the rub; To sleep: perchance to dream: ay, there'\''s the rub;
For in that sleep of death what dreams may come For in that sleep of death what dreams may come
When we have shuffled off this mortal coil, When we have shuffled off this mortal coil,
Must give us pause: there's the respect Must give us pause: there'\''s the respect
That makes calamity of so long life; That makes calamity of so long life;
EOF EOF
git checkout -b first &&
test_tick &&
git commit -q -a -m first && git commit -q -a -m first &&
git checkout -b second master && git checkout -b second master &&
git show first:a1 | git show first:a1 |
sed -e 's/To die, t/To die! T/' -e 's/Some title/Some Title/' > a1 && sed -e "s/To die, t/To die! T/" -e "s/Some title/Some Title/" >a1 &&
echo '* END *' >>a1 && echo "* END *" >>a1 &&
test_tick &&
git commit -q -a -m second git commit -q -a -m second
" '
test_expect_success 'nothing recorded without rerere' ' test_expect_success 'nothing recorded without rerere' '
(rm -rf .git/rr-cache; git config rerere.enabled false) && rm -rf .git/rr-cache &&
git config rerere.enabled false &&
test_must_fail git merge first && test_must_fail git merge first &&
! test -d .git/rr-cache ! test -d .git/rr-cache
' '
# activate rerere, old style test_expect_success 'activate rerere, old style (conflicting merge)' '
test_expect_success 'conflicting merge' '
git reset --hard && git reset --hard &&
mkdir .git/rr-cache && mkdir .git/rr-cache &&
git config --unset rerere.enabled && test_might_fail git config --unset rerere.enabled &&
test_must_fail git merge first test_must_fail git merge first &&
'
sha1=$(perl -pe 's/ .*//' .git/MERGE_RR) sha1=$(perl -pe "s/ .*//" .git/MERGE_RR) &&
rr=.git/rr-cache/$sha1 rr=.git/rr-cache/$sha1 &&
test_expect_success 'recorded preimage' "grep ^=======$ $rr/preimage" grep "^=======\$" $rr/preimage &&
! test -f $rr/postimage &&
! test -f $rr/thisimage
'
test_expect_success 'rerere.enabled works, too' ' test_expect_success 'rerere.enabled works, too' '
rm -rf .git/rr-cache && rm -rf .git/rr-cache &&
git config rerere.enabled true && git config rerere.enabled true &&
git reset --hard && git reset --hard &&
test_must_fail git merge first && test_must_fail git merge first &&
sha1=$(perl -pe "s/ .*//" .git/MERGE_RR) &&
rr=.git/rr-cache/$sha1 &&
grep ^=======$ $rr/preimage grep ^=======$ $rr/preimage
' '
test_expect_success 'no postimage or thisimage yet' \ test_expect_success 'set up rr-cache' '
"test ! -f $rr/postimage -a ! -f $rr/thisimage" rm -rf .git/rr-cache &&
git config rerere.enabled true &&
test_expect_success 'preimage has right number of lines' ' git reset --hard &&
test_must_fail git merge first &&
cnt=$(sed -ne "/^<<<<<<</,/^>>>>>>>/p" $rr/preimage | wc -l) && sha1=$(perl -pe "s/ .*//" .git/MERGE_RR) &&
test $cnt = 13 rr=.git/rr-cache/$sha1
' '
git show first:a1 > a1 test_expect_success 'rr-cache looks sane' '
# no postimage or thisimage yet
! test -f $rr/postimage &&
! test -f $rr/thisimage &&
cat > expect << EOF # preimage has right number of lines
cnt=$(sed -ne "/^<<<<<<</,/^>>>>>>>/p" $rr/preimage | wc -l) &&
echo $cnt &&
test $cnt = 13
'
test_expect_success 'rerere diff' '
git show first:a1 >a1 &&
cat >expect <<-\EOF &&
--- a/a1 --- a/a1
+++ b/a1 +++ b/a1
@@ -1,4 +1,4 @@ @@ -1,4 +1,4 @@
-Some Title -Some Title
+Some title +Some title
========== ==========
Whether 'tis nobler in the mind to suffer Whether '\''tis nobler in the mind to suffer
The slings and arrows of outrageous fortune, The slings and arrows of outrageous fortune,
@@ -8,21 +8,11 @@ @@ -8,21 +8,11 @@
The heart-ache and the thousand natural shocks The heart-ache and the thousand natural shocks
That flesh is heir to, 'tis a consummation That flesh is heir to, '\''tis a consummation
Devoutly to be wish'd. Devoutly to be wish'\''d.
-<<<<<<< -<<<<<<<
-Some Title -Some Title
-========== -==========
@ -105,92 +140,97 @@ cat > expect << EOF
========== ==========
To die, to sleep; To die, to sleep;
->>>>>>> ->>>>>>>
To sleep: perchance to dream: ay, there's the rub; To sleep: perchance to dream: ay, there'\''s the rub;
For in that sleep of death what dreams may come For in that sleep of death what dreams may come
When we have shuffled off this mortal coil, When we have shuffled off this mortal coil,
Must give us pause: there's the respect Must give us pause: there'\''s the respect
That makes calamity of so long life; That makes calamity of so long life;
-<<<<<<< -<<<<<<<
-======= -=======
-* END * -* END *
->>>>>>> ->>>>>>>
EOF EOF
git rerere diff > out git rerere diff >out &&
test_cmp expect out
'
test_expect_success 'rerere diff' 'test_cmp expect out' test_expect_success 'rerere status' '
echo a1 >expect &&
git rerere status >out &&
test_cmp expect out
'
cat > expect << EOF test_expect_success 'first postimage wins' '
a1 git show first:a1 | sed "s/To die: t/To die! T/" >expect &&
EOF
git rerere status > out git commit -q -a -m "prefer first over second" &&
test -f $rr/postimage &&
test_expect_success 'rerere status' 'test_cmp 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"
test_expect_success 'another conflicting merge' '
git checkout -b third master && git checkout -b third master &&
git show second^:a1 | sed "s/To die: t/To die! T/" >a1 && git show second^:a1 | sed "s/To die: t/To die! T/" >a1 &&
git commit -q -a -m third && git commit -q -a -m third &&
test_must_fail git pull . first
test_must_fail git pull . first &&
# rerere kicked in
! grep "^=======\$" a1 &&
test_cmp expect a1
' '
git show first:a1 | sed 's/To die: t/To die! T/' > expect test_expect_success 'rerere clear' '
test_expect_success 'rerere kicked in' "! grep ^=======$ a1" rm $rr/postimage &&
echo "$sha1 a1" | perl -pe "y/\012/\000/" >.git/MERGE_RR &&
git rerere clear &&
! test -d $rr
'
test_expect_success 'rerere prefers first change' 'test_cmp a1 expect' test_expect_success 'set up for garbage collection tests' '
mkdir -p $rr &&
echo Hello >$rr/preimage &&
echo World >$rr/postimage &&
rm $rr/postimage sha2=4000000000000000000000000000000000000000 &&
echo "$sha1 a1" | perl -pe 'y/\012/\000/' > .git/MERGE_RR rr2=.git/rr-cache/$sha2 &&
mkdir $rr2 &&
echo Hello >$rr2/preimage &&
test_expect_success 'rerere clear' 'git rerere clear' almost_15_days_ago=$((60-15*86400)) &&
just_over_15_days_ago=$((-1-15*86400)) &&
almost_60_days_ago=$((60-60*86400)) &&
just_over_60_days_ago=$((-1-60*86400)) &&
test_expect_success 'clear removed the directory' "test ! -d $rr" test-chmtime =$almost_60_days_ago $rr/preimage &&
mkdir $rr
echo Hello > $rr/preimage
echo World > $rr/postimage
sha2=4000000000000000000000000000000000000000
rr2=.git/rr-cache/$sha2
mkdir $rr2
echo Hello > $rr2/preimage
almost_15_days_ago=$((60-15*86400))
just_over_15_days_ago=$((-1-15*86400))
almost_60_days_ago=$((60-60*86400))
just_over_60_days_ago=$((-1-60*86400))
test-chmtime =$almost_60_days_ago $rr/preimage
test-chmtime =$almost_15_days_ago $rr2/preimage test-chmtime =$almost_15_days_ago $rr2/preimage
'
test_expect_success 'garbage collection (part1)' 'git rerere gc' test_expect_success 'garbage collection preserves young records' '
git rerere gc &&
test -f $rr/preimage &&
test -f $rr2/preimage
'
test_expect_success 'young records still live' \ test_expect_success 'old records rest in peace' '
"test -f $rr/preimage && test -f $rr2/preimage" test-chmtime =$just_over_60_days_ago $rr/preimage &&
test-chmtime =$just_over_15_days_ago $rr2/preimage &&
git rerere gc &&
! test -f $rr/preimage &&
! test -f $rr2/preimage
'
test-chmtime =$just_over_60_days_ago $rr/preimage test_expect_success 'setup: file2 added differently in two branches' '
test-chmtime =$just_over_15_days_ago $rr2/preimage
test_expect_success 'garbage collection (part2)' 'git rerere gc'
test_expect_success 'old records rest in peace' \
"test ! -f $rr/preimage && test ! -f $rr2/preimage"
test_expect_success 'file2 added differently in two branches' '
git reset --hard && git reset --hard &&
git checkout -b fourth && git checkout -b fourth &&
echo Hallo >file2 && echo Hallo >file2 &&
git add file2 && git add file2 &&
test_tick &&
git commit -m version1 && git commit -m version1 &&
git checkout third && git checkout third &&
echo Bello >file2 && echo Bello >file2 &&
git add file2 && git add file2 &&
test_tick &&
git commit -m version2 && git commit -m version2 &&
test_must_fail git merge fourth && test_must_fail git merge fourth &&
echo Cello >file2 && echo Cello >file2 &&
git add file2 && git add file2 &&
@ -198,43 +238,58 @@ test_expect_success 'file2 added differently in two branches' '
' '
test_expect_success 'resolution was recorded properly' ' test_expect_success 'resolution was recorded properly' '
echo Cello >expected &&
git reset --hard HEAD~2 && git reset --hard HEAD~2 &&
git checkout -b fifth && git checkout -b fifth &&
echo Hallo >file3 && echo Hallo >file3 &&
git add file3 && git add file3 &&
test_tick &&
git commit -m version1 && git commit -m version1 &&
git checkout third && git checkout third &&
echo Bello >file3 && echo Bello >file3 &&
git add file3 && git add file3 &&
test_tick &&
git commit -m version2 && git commit -m version2 &&
git tag version2 && git tag version2 &&
test_must_fail git merge fifth && test_must_fail git merge fifth &&
test Cello = "$(cat file3)" && test_cmp expected file3 &&
test 0 != $(git ls-files -u | wc -l) test_must_fail git update-index --refresh
' '
test_expect_success 'rerere.autoupdate' ' test_expect_success 'rerere.autoupdate' '
git config rerere.autoupdate true git config rerere.autoupdate true &&
git reset --hard && git reset --hard &&
git checkout version2 && git checkout version2 &&
test_must_fail git merge fifth && test_must_fail git merge fifth &&
test 0 = $(git ls-files -u | wc -l) git update-index --refresh
' '
test_expect_success 'merge --rerere-autoupdate' ' test_expect_success 'merge --rerere-autoupdate' '
git config --unset rerere.autoupdate test_might_fail git config --unset rerere.autoupdate &&
git reset --hard && git reset --hard &&
git checkout version2 && git checkout version2 &&
test_must_fail git merge --rerere-autoupdate fifth && test_must_fail git merge --rerere-autoupdate fifth &&
test 0 = $(git ls-files -u | wc -l) git update-index --refresh
' '
test_expect_success 'merge --no-rerere-autoupdate' ' test_expect_success 'merge --no-rerere-autoupdate' '
git config rerere.autoupdate true headblob=$(git rev-parse version2:file3) &&
mergeblob=$(git rev-parse fifth:file3) &&
cat >expected <<-EOF &&
100644 $headblob 2 file3
100644 $mergeblob 3 file3
EOF
git config rerere.autoupdate true &&
git reset --hard && git reset --hard &&
git checkout version2 && git checkout version2 &&
test_must_fail git merge --no-rerere-autoupdate fifth && test_must_fail git merge --no-rerere-autoupdate fifth &&
test 2 = $(git ls-files -u | wc -l) git ls-files -u >actual &&
test_cmp expected actual
' '
test_done test_done