summaryrefslogtreecommitdiff
path: root/t/t6501-freshen-objects.sh
diff options
context:
space:
mode:
authorLibravatar Jeff King <peff@peff.net>2014-10-15 18:42:09 -0400
committerLibravatar Junio C Hamano <gitster@pobox.com>2014-10-16 10:10:43 -0700
commitabcb86553d3ec4afffa4e3963089dffe0559740e (patch)
tree4ad24dfe7d40b7b079bd186a77bfabd3c0570f9e /t/t6501-freshen-objects.sh
parentpack-objects: refactor unpack-unreachable expiration check (diff)
downloadtgif-abcb86553d3ec4afffa4e3963089dffe0559740e.tar.xz
pack-objects: match prune logic for discarding objects
A recent commit taught git-prune to keep non-recent objects that are reachable from recent ones. However, pack-objects, when loosening unreachable objects, tries to optimize out the write in the case that the object will be immediately pruned. It now gets this wrong, since its rule does not reflect the new prune code (and this can be seen by running t6501 with a strategically placed repack). Let's teach pack-objects similar logic. Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 't/t6501-freshen-objects.sh')
-rwxr-xr-xt/t6501-freshen-objects.sh93
1 files changed, 55 insertions, 38 deletions
diff --git a/t/t6501-freshen-objects.sh b/t/t6501-freshen-objects.sh
index de941c2cb2..e25c47dd5c 100755
--- a/t/t6501-freshen-objects.sh
+++ b/t/t6501-freshen-objects.sh
@@ -39,50 +39,67 @@ commit () {
git commit -m "$1"
}
-test_expect_success 'disable reflogs' '
- git config core.logallrefupdates false &&
- rm -rf .git/logs
-'
+maybe_repack () {
+ if test -n "$repack"; then
+ git repack -ad
+ fi
+}
+
+for repack in '' true; do
+ title=${repack:+repack}
+ title=${title:-loose}
+
+ test_expect_success "make repo completely empty ($title)" '
+ rm -rf .git &&
+ git init
+ '
+
+ test_expect_success "disable reflogs ($title)" '
+ git config core.logallrefupdates false &&
+ rm -rf .git/logs
+ '
-test_expect_success 'setup basic history' '
- commit base
-'
+ test_expect_success "setup basic history ($title)" '
+ commit base
+ '
-test_expect_success 'create and abandon some objects' '
- git checkout -b experiment &&
- commit abandon &&
- git checkout master &&
- git branch -D experiment
-'
+ test_expect_success "create and abandon some objects ($title)" '
+ git checkout -b experiment &&
+ commit abandon &&
+ maybe_repack &&
+ git checkout master &&
+ git branch -D experiment
+ '
-test_expect_success 'simulate time passing' '
- find .git/objects -type f |
- xargs test-chmtime -v -86400
-'
+ test_expect_success "simulate time passing ($title)" '
+ find .git/objects -type f |
+ xargs test-chmtime -v -86400
+ '
-test_expect_success 'start writing new commit with old blob' '
- tree=$(
- GIT_INDEX_FILE=index.tmp &&
- export GIT_INDEX_FILE &&
- git read-tree HEAD &&
- add unrelated &&
- add abandon &&
- git write-tree
- )
-'
+ test_expect_success "start writing new commit with old blob ($title)" '
+ tree=$(
+ GIT_INDEX_FILE=index.tmp &&
+ export GIT_INDEX_FILE &&
+ git read-tree HEAD &&
+ add unrelated &&
+ add abandon &&
+ git write-tree
+ )
+ '
-test_expect_success 'simultaneous gc' '
- git gc --prune=12.hours.ago
-'
+ test_expect_success "simultaneous gc ($title)" '
+ git gc --prune=12.hours.ago
+ '
-test_expect_success 'finish writing out commit' '
- commit=$(echo foo | git commit-tree -p HEAD $tree) &&
- git update-ref HEAD $commit
-'
+ test_expect_success "finish writing out commit ($title)" '
+ commit=$(echo foo | git commit-tree -p HEAD $tree) &&
+ git update-ref HEAD $commit
+ '
-# "abandon" blob should have been rescued by reference from new tree
-test_expect_success 'repository passes fsck' '
- git fsck
-'
+ # "abandon" blob should have been rescued by reference from new tree
+ test_expect_success "repository passes fsck ($title)" '
+ git fsck
+ '
+done
test_done