Re: [PATCH 0/5] handling 4GB .idx files
> Jeff King <peff@peff.net> hat am 16.11.2020 05:10 geschrieben:
> So I dunno. I wouldn't be opposed to codifying some of that in
> a script, but I can't imagine anybody ever running it unless they
> were working on this specific problem.
Thanks for the pointers.
Below is what I came up with. It passes here. I've replaced awk with cut from the original draft, and also moved the perl script out of the test as I think the quoting is getting way too messy otherwise. And I've added --no-dangling to git fsck as otherwise it takes forever to output the obvious dangling blobs. The unpack limit is mostly for testing the test itself with a smaller amount of blobs. But I still think it is worthwile to force everything into a pack.
--- a/t/t1600-index.sh
+++ b/t/t1600-index.sh
@@ -97,4 +97,34 @@ test_expect_success 'index version config precedence' '
test_index_version 0 true 2 2
'
+{
+ echo "#!$SHELL_PATH"
+ cat <<'EOF'
+ "$PERL_PATH" -e '
+ for (0..154_000_000) {
+ print "blob\n";
+ print "data <<EOF\n";
+ print "$_\n";
+ print "EOF\n";
+ } '
+EOF
+
+} >dump
+chmod +x dump
+
+test_expect_success EXPENSIVE,PERL 'Test 4GB boundary for the index' '
+ test_config fastimport.unpacklimit 0 &&
+ ./dump | git fast-import &&
+ blob=$(echo 0 | git hash-object --stdin) &&
+ git cat-file blob $blob >actual &&
+ echo 0 >expect &&
+ test_cmp expect actual &&
+ idx_pack=$(ls .git/objects/pack/*.idx) &&
+ test_file_not_empty $idx_pack &&
+ final=$(git show-index <$idx_pack | tail -1 | cut -d " " -f2) &&
+ git cat-file blob $final &&
+ git cat-file blob fffffff &&
+ git fsck --strict --no-dangling
+'
+
test_done
--