ref-filter: rename the 'strip' option to 'lstrip'
[gitweb.git] / t / t6501-freshen-objects.sh
index e25c47dd5cd9dde18a6cba978f01fee61f994f57..cf076dcd940aa0d74bd8df03b4f6c768e1954455 100755 (executable)
@@ -56,7 +56,7 @@ for repack in '' true; do
 
        test_expect_success "disable reflogs ($title)" '
                git config core.logallrefupdates false &&
-               rm -rf .git/logs
+               git reflog expire --expire=all --all
        '
 
        test_expect_success "setup basic history ($title)" '
@@ -100,6 +100,48 @@ for repack in '' true; do
        test_expect_success "repository passes fsck ($title)" '
                git fsck
        '
+
+       test_expect_success "abandon objects again ($title)" '
+               git reset --hard HEAD^ &&
+               find .git/objects -type f |
+               xargs test-chmtime -v -86400
+       '
+
+       test_expect_success "start writing new commit with same tree ($title)" '
+               tree=$(
+                       GIT_INDEX_FILE=index.tmp &&
+                       export GIT_INDEX_FILE &&
+                       git read-tree HEAD &&
+                       add abandon &&
+                       add unrelated &&
+                       git write-tree
+               )
+       '
+
+       test_expect_success "simultaneous gc ($title)" '
+               git gc --prune=12.hours.ago
+       '
+
+       # tree should have been refreshed by write-tree
+       test_expect_success "finish writing out commit ($title)" '
+               commit=$(echo foo | git commit-tree -p HEAD $tree) &&
+               git update-ref HEAD $commit
+       '
 done
 
+test_expect_success 'do not complain about existing broken links' '
+       cat >broken-commit <<-\EOF &&
+       tree 0000000000000000000000000000000000000001
+       parent 0000000000000000000000000000000000000002
+       author whatever <whatever@example.com> 1234 -0000
+       committer whatever <whatever@example.com> 1234 -0000
+
+       some message
+       EOF
+       commit=$(git hash-object -t commit -w broken-commit) &&
+       git gc 2>stderr &&
+       verbose git cat-file -e $commit &&
+       test_must_be_empty stderr
+'
+
 test_done