t7701: make annotated tag unreachable
commit25d59524bbc79b4f4560fca1b9b22c8c36780636
authorTaylor Blau <me@ttaylorr.com>
Sat, 24 Jun 2023 14:33:47 +0000 (24 10:33 -0400)
committerJunio C Hamano <gitster@pobox.com>
Sat, 24 Jun 2023 22:50:41 +0000 (24 15:50 -0700)
tree312c47183a226c479484c0b343ce18c8f1a78660
parent4dc16e2cb05fa467c3ef507679ae625f785770cf
t7701: make annotated tag unreachable

In 4dc16e2cb0 (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>
t/t7701-repack-unpack-unreachable.sh