Skip to content

Commit

Permalink
t7701: make annotated tag unreachable
Browse files Browse the repository at this point in the history
In 4dc16e2 (gc: introduce `gc.recentObjectsHook`, 2023-06-07), we
added tests to ensure that prune-able (i.e. unreachable and with mtime
older than the cutoff) objects which are marked as recent via the new
`gc.recentObjectsHook` configuration are unpacked as loose with
`--unpack-unreachable`.

In that test, we also ensure that objects which are reachable from other
unreachable objects which were *not* pruned are kept as well, regardless
of their mtimes. For this, we use an annotated tag pointing at a blob
($obj2) which would otherwise be pruned.

But after pruning, that object is kept around for two reasons. One, the
tag object's mtime wasn't adjusted to be beyond the 1-hour cutoff, so it
would be kept as due to its recency regardless. The other reason is
because the tag itself is reachable.

Use mktag to write the tag object directly without pointing a reference
at it, and adjust the mtime of the tag object to be older than the
cutoff to ensure that our `gc.recentObjectsHook` configuration is
working as intended.

Noticed-by: Jeff King <peff@peff.net>
Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
ttaylorr authored and gitster committed Jun 24, 2023
1 parent 4dc16e2 commit 25d5952
Showing 1 changed file with 13 additions and 2 deletions.
15 changes: 13 additions & 2 deletions t/t7701-repack-unpack-unreachable.sh
Original file line number Diff line number Diff line change
Expand Up @@ -126,8 +126,18 @@ test_expect_success 'gc.recentObjectsHook' '
git cat-file -p $obj2 &&
git cat-file -p $obj3 &&
git tag -a -m tag obj2-tag $obj2 &&
obj2_tag="$(git rev-parse obj2-tag)" &&
# make an unreachable annotated tag object to ensure we rescue objects
# which are reachable from non-pruned unreachable objects
obj2_tag="$(git mktag <<-EOF
object $obj2
type blob
tag obj2-tag
tagger T A Gger <tagger@example.com> 1234567890 -0000
EOF
)" &&
obj2_tag_pack="$(echo $obj2_tag | git pack-objects .git/objects/pack/pack)" &&
git prune-packed &&
write_script precious-objects <<-EOF &&
echo $obj2_tag
Expand All @@ -136,6 +146,7 @@ test_expect_success 'gc.recentObjectsHook' '
test-tool chmtime =-86400 .git/objects/pack/pack-$pack2.pack &&
test-tool chmtime =-86400 .git/objects/pack/pack-$pack3.pack &&
test-tool chmtime =-86400 .git/objects/pack/pack-$obj2_tag_pack.pack &&
git repack -A -d --unpack-unreachable=1.hour.ago &&
git cat-file -p $obj1 &&
Expand Down

0 comments on commit 25d5952

Please sign in to comment.