Change remote tracking to remote-tracking in non-trivial places
[gitweb.git] / t / t4200-rerere.sh
index 3ed4d1a59c286be5cf8e2c89ff43c78e850f93ee..36255d608a7af7d85f479986e302138401f25a8d 100755 (executable)
@@ -166,6 +166,8 @@ test_expect_success 'first postimage wins' '
        git commit -q -a -m "prefer first over second" &&
        test -f $rr/postimage &&
 
+       oldmtimepost=$(test-chmtime -v -60 $rr/postimage | cut -f 1) &&
+
        git checkout -b third master &&
        git show second^:a1 | sed "s/To die: t/To die! T/" >a1 &&
        git commit -q -a -m third &&
@@ -176,6 +178,11 @@ test_expect_success 'first postimage wins' '
        test_cmp expect a1
 '
 
+test_expect_success 'rerere updates postimage timestamp' '
+       newmtimepost=$(test-chmtime -v +0 $rr/postimage | cut -f 1) &&
+       test $oldmtimepost -lt $newmtimepost
+'
+
 test_expect_success 'rerere clear' '
        rm $rr/postimage &&
        echo "$sha1     a1" | perl -pe "y/\012/\000/" >.git/MERGE_RR &&
@@ -198,18 +205,19 @@ test_expect_success 'set up for garbage collection tests' '
        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 =$just_over_60_days_ago $rr/preimage &&
+       test-chmtime =$almost_60_days_ago $rr/postimage &&
        test-chmtime =$almost_15_days_ago $rr2/preimage
 '
 
-test_expect_success 'garbage collection preserves young records' '
+test_expect_success 'gc preserves young or recently used records' '
        git rerere gc &&
        test -f $rr/preimage &&
        test -f $rr2/preimage
 '
 
 test_expect_success 'old records rest in peace' '
-       test-chmtime =$just_over_60_days_ago $rr/preimage &&
+       test-chmtime =$just_over_60_days_ago $rr/postimage &&
        test-chmtime =$just_over_15_days_ago $rr2/preimage &&
        git rerere gc &&
        ! test -f $rr/preimage &&
@@ -292,4 +300,95 @@ test_expect_success 'merge --no-rerere-autoupdate' '
        test_cmp expected actual
 '
 
+test_expect_success 'set up an unresolved merge' '
+       headblob=$(git rev-parse version2:file3) &&
+       mergeblob=$(git rev-parse fifth:file3) &&
+       cat >expected.unresolved <<-EOF &&
+       100644 $headblob 2      file3
+       100644 $mergeblob 3     file3
+       EOF
+
+       test_might_fail git config --unset rerere.autoupdate &&
+       git reset --hard &&
+       git checkout version2 &&
+       fifth=$(git rev-parse fifth) &&
+       echo "$fifth            branch 'fifth' of ." |
+       git fmt-merge-msg >msg &&
+       ancestor=$(git merge-base version2 fifth) &&
+       test_must_fail git merge-recursive "$ancestor" -- HEAD fifth &&
+
+       git ls-files --stage >failedmerge &&
+       cp file3 file3.conflict &&
+
+       git ls-files -u >actual &&
+       test_cmp expected.unresolved actual
+'
+
+test_expect_success 'explicit rerere' '
+       test_might_fail git config --unset rerere.autoupdate &&
+       git rm -fr --cached . &&
+       git update-index --index-info <failedmerge &&
+       cp file3.conflict file3 &&
+       test_must_fail git update-index --refresh -q &&
+
+       git rerere &&
+       git ls-files -u >actual &&
+       test_cmp expected.unresolved actual
+'
+
+test_expect_success 'explicit rerere with autoupdate' '
+       git config rerere.autoupdate true &&
+       git rm -fr --cached . &&
+       git update-index --index-info <failedmerge &&
+       cp file3.conflict file3 &&
+       test_must_fail git update-index --refresh -q &&
+
+       git rerere &&
+       git update-index --refresh
+'
+
+test_expect_success 'explicit rerere --rerere-autoupdate overrides' '
+       git config rerere.autoupdate false &&
+       git rm -fr --cached . &&
+       git update-index --index-info <failedmerge &&
+       cp file3.conflict file3 &&
+       git rerere &&
+       git ls-files -u >actual1 &&
+
+       git rm -fr --cached . &&
+       git update-index --index-info <failedmerge &&
+       cp file3.conflict file3 &&
+       git rerere --rerere-autoupdate &&
+       git update-index --refresh &&
+
+       git rm -fr --cached . &&
+       git update-index --index-info <failedmerge &&
+       cp file3.conflict file3 &&
+       git rerere --rerere-autoupdate --no-rerere-autoupdate &&
+       git ls-files -u >actual2 &&
+
+       git rm -fr --cached . &&
+       git update-index --index-info <failedmerge &&
+       cp file3.conflict file3 &&
+       git rerere --rerere-autoupdate --no-rerere-autoupdate --rerere-autoupdate &&
+       git update-index --refresh &&
+
+       test_cmp expected.unresolved actual1 &&
+       test_cmp expected.unresolved actual2
+'
+
+test_expect_success 'rerere --no-no-rerere-autoupdate' '
+       git rm -fr --cached . &&
+       git update-index --index-info <failedmerge &&
+       cp file3.conflict file3 &&
+       test_must_fail git rerere --no-no-rerere-autoupdate 2>err &&
+       grep [Uu]sage err &&
+       test_must_fail git update-index --refresh
+'
+
+test_expect_success 'rerere -h' '
+       test_must_fail git rerere -h >help &&
+       grep [Uu]sage help
+'
+
 test_done