]> git.ipfire.org Git - thirdparty/git.git/commitdiff
t7900: clean up some broken refs
authorDerrick Stolee <dstolee@microsoft.com>
Tue, 19 Jan 2021 12:52:04 +0000 (12:52 +0000)
committerJunio C Hamano <gitster@pobox.com>
Thu, 21 Jan 2021 02:46:22 +0000 (18:46 -0800)
The tests for the 'prefetch' task create remotes and fetch refs into
'refs/prefetch/<remote>/' and tags into 'refs/tags/'. These tests use
the remotes to create objects not intended to be seen by the "local"
repository.

In that sense, the incrmental-repack tasks did not have these objects
and refs in mind. That test replaces the object directory with a
specific pack-file layout for testing the batch-size logic. However,
this causes some operations to start showing warnings such as:

 error: refs/prefetch/remote1/one does not point to a valid object!
 error: refs/tags/one does not point to a valid object!

This only shows up if you run the tests verbosely and watch the output.
It caught my eye and I _thought_ that there was a bug where 'git gc' or
'git repack' wouldn't check 'refs/prefetch/' before pruning objects.
That is incorrect. Those commands do handle 'refs/prefetch/' correctly.

All that is left is to clean up the tests in t7900-maintenance.sh to
remove these tags and refs that are not being repacked for the
incremental-repack tests. Use update-ref to ensure this works with all
ref backends.

Helped-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Reviewed-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t7900-maintenance.sh

index f9031cbb44b419b1156775348dde693ae4163d96..78ccf4b33f87c98d8b795ea7e31b6c29fc8837fb 100755 (executable)
@@ -256,6 +256,13 @@ test_expect_success 'incremental-repack task' '
        HEAD
        ^HEAD~1
        EOF
+
+       # Delete refs that have not been repacked in these packs.
+       git for-each-ref --format="delete %(refname)" \
+               refs/prefetch refs/tags >refs &&
+       git update-ref --stdin <refs &&
+
+       # Replace the object directory with this pack layout.
        rm -f $packDir/pack-* &&
        rm -f $packDir/loose-* &&
        ls $packDir/*.pack >packs-before &&