Introduce remove_or_warn function
[gitweb.git] / t / t5304-prune.sh
index 55ed7c7935c007573761842cea5978a784c865b3..e2ed13dba2705b15d6a1f623589acce134749fab 100755 (executable)
@@ -6,6 +6,17 @@
 test_description='prune'
 . ./test-lib.sh
 
+day=$((60*60*24))
+week=$(($day*7))
+
+add_blob() {
+       before=$(git count-objects | sed "s/ .*//") &&
+       BLOB=$(echo aleph_0 | git hash-object -w --stdin) &&
+       BLOB_FILE=.git/objects/$(echo $BLOB | sed "s/^../&\//") &&
+       test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&
+       test -f $BLOB_FILE
+}
+
 test_expect_success setup '
 
        : > file &&
@@ -31,11 +42,7 @@ test_expect_success 'prune stale packs' '
 
 test_expect_success 'prune --expire' '
 
-       before=$(git count-objects | sed "s/ .*//") &&
-       BLOB=$(echo aleph | git hash-object -w --stdin) &&
-       BLOB_FILE=.git/objects/$(echo $BLOB | sed "s/^../&\//") &&
-       test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&
-       test -f $BLOB_FILE &&
+       add_blob &&
        git prune --expire=1.hour.ago &&
        test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&
        test -f $BLOB_FILE &&
@@ -48,16 +55,12 @@ test_expect_success 'prune --expire' '
 
 test_expect_success 'gc: implicit prune --expire' '
 
-       before=$(git count-objects | sed "s/ .*//") &&
-       BLOB=$(echo aleph_0 | git hash-object -w --stdin) &&
-       BLOB_FILE=.git/objects/$(echo $BLOB | sed "s/^../&\//") &&
-       test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&
-       test -f $BLOB_FILE &&
-       test-chmtime =-$((86400*14-30)) $BLOB_FILE &&
+       add_blob &&
+       test-chmtime =-$((2*$week-30)) $BLOB_FILE &&
        git gc &&
        test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&
        test -f $BLOB_FILE &&
-       test-chmtime =-$((86400*14+1)) $BLOB_FILE &&
+       test-chmtime =-$((2*$week+1)) $BLOB_FILE &&
        git gc &&
        test $before = $(git count-objects | sed "s/ .*//") &&
        ! test -f $BLOB_FILE
@@ -114,12 +117,8 @@ test_expect_success 'prune: do not prune heads listed as an argument' '
 
 test_expect_success 'gc --no-prune' '
 
-       before=$(git count-objects | sed "s/ .*//") &&
-       BLOB=$(echo aleph_0 | git hash-object -w --stdin) &&
-       BLOB_FILE=.git/objects/$(echo $BLOB | sed "s/^../&\//") &&
-       test $((1 + $before)) = $(git count-objects | sed "s/ .*//") &&
-       test -f $BLOB_FILE &&
-       test-chmtime =-$((86400*5001)) $BLOB_FILE &&
+       add_blob &&
+       test-chmtime =-$((5001*$day)) $BLOB_FILE &&
        git config gc.pruneExpire 2.days.ago &&
        git gc --no-prune &&
        test 1 = $(git count-objects | sed "s/ .*//") &&
@@ -140,9 +139,8 @@ test_expect_success 'gc respects gc.pruneExpire' '
 
 test_expect_success 'gc --prune=<date>' '
 
-       BLOB=$(echo aleph_0 | git hash-object -w --stdin) &&
-       BLOB_FILE=.git/objects/$(echo $BLOB | sed "s/^../&\//") &&
-       test-chmtime =-$((86400*5001)) $BLOB_FILE &&
+       add_blob &&
+       test-chmtime =-$((5001*$day)) $BLOB_FILE &&
        git gc --prune=5002.days.ago &&
        test -f $BLOB_FILE &&
        git gc --prune=5000.days.ago &&
@@ -150,4 +148,50 @@ test_expect_success 'gc --prune=<date>' '
 
 '
 
+test_expect_success 'gc --prune=never' '
+
+       add_blob &&
+       git gc --prune=never &&
+       test -f $BLOB_FILE &&
+       git gc --prune=now &&
+       test ! -f $BLOB_FILE
+
+'
+
+test_expect_success 'gc respects gc.pruneExpire=never' '
+
+       git config gc.pruneExpire never &&
+       add_blob &&
+       git gc &&
+       test -f $BLOB_FILE &&
+       git config gc.pruneExpire now &&
+       git gc &&
+       test ! -f $BLOB_FILE
+
+'
+
+test_expect_success 'prune --expire=never' '
+
+       add_blob &&
+       git prune --expire=never &&
+       test -f $BLOB_FILE &&
+       git prune &&
+       test ! -f $BLOB_FILE
+
+'
+
+test_expect_success 'gc: prune old objects after local clone' '
+       add_blob &&
+       test-chmtime =-$((2*$week+1)) $BLOB_FILE &&
+       git clone --no-hardlinks . aclone &&
+       (
+               cd aclone &&
+               test 1 = $(git count-objects | sed "s/ .*//") &&
+               test -f $BLOB_FILE &&
+               git gc --prune &&
+               test 0 = $(git count-objects | sed "s/ .*//") &&
+               ! test -f $BLOB_FILE
+       )
+'
+
 test_done