]> git.ipfire.org Git - thirdparty/git.git/commitdiff
t7700: consolidate code into test_no_missing_in_packs()
authorDenton Liu <liu.denton@gmail.com>
Wed, 4 Dec 2019 22:03:09 +0000 (14:03 -0800)
committerJunio C Hamano <gitster@pobox.com>
Wed, 4 Dec 2019 22:25:05 +0000 (14:25 -0800)
The code to test that objects were not missing from the packfile was
duplicated many times. Extract the duplicated code into
test_no_missing_in_packs() and use that instead.

Refactor the resulting extraction so that if any git commands fail,
their return codes are not silently lost.

Instead of verifying each file of `alt_objects/pack/*.idx` individually
in a for-loop, batch them together into one verification step.

The original testing construct was O(n^2): it used a grep in a loop to
test whether any objects were missing in the packfile. Rewrite this to
extract the hash using sed or cut, sort the files, then use `comm -23`
so that finding missing lines from the original file is done more
efficiently.

While we're at it, add a space to `commit_and_pack ()` for style.

Signed-off-by: Denton Liu <liu.denton@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t7700-repack.sh

index 1d14ddcbdb991d7f30bd7abb4907a0bab37b465a..5fb9e99f34f34f11d2fe53710ed386b0d73fb4e0 100755 (executable)
@@ -4,12 +4,23 @@ test_description='git repack works correctly'
 
 . ./test-lib.sh
 
-commit_and_pack() {
+commit_and_pack () {
        test_commit "$@" 1>&2 &&
        SHA1=$(git pack-objects --all --unpacked --incremental .git/objects/pack/pack </dev/null) &&
        echo pack-${SHA1}.pack
 }
 
+test_no_missing_in_packs () {
+       myidx=$(ls -1 .git/objects/pack/*.idx) &&
+       test_path_is_file "$myidx" &&
+       git verify-pack -v alt_objects/pack/*.idx >orig.raw &&
+       sed -n -e "s/^\([0-9a-f]\{40\}\).*/\1/p" orig.raw | sort >orig &&
+       git verify-pack -v $myidx >dest.raw &&
+       cut -d" " -f1 dest.raw | sort >dest &&
+       comm -23 orig dest >missing &&
+       test_must_be_empty missing
+}
+
 test_expect_success 'objects in packs marked .keep are not repacked' '
        echo content1 >file1 &&
        echo content2 >file2 &&
@@ -105,19 +116,7 @@ test_expect_success 'packed obs in alt ODB are repacked even when local repo is
        mkdir alt_objects/pack &&
        mv .git/objects/pack/* alt_objects/pack &&
        git repack -a &&
-       myidx=$(ls -1 .git/objects/pack/*.idx) &&
-       test_path_is_file "$myidx" &&
-       for p in alt_objects/pack/*.idx
-       do
-               git verify-pack -v $p | sed -n -e "/^[0-9a-f]\{40\}/p"
-       done | while read sha1 rest
-       do
-               if ! ( git verify-pack -v $myidx | grep "^$sha1" )
-               then
-                       echo "Missing object in local pack: $sha1"
-                       return 1
-               fi
-       done
+       test_no_missing_in_packs
 '
 
 test_expect_success 'packed obs in alt ODB are repacked when local repo has packs' '
@@ -128,19 +127,7 @@ test_expect_success 'packed obs in alt ODB are repacked when local repo has pack
        git commit -m more_content &&
        git repack &&
        git repack -a -d &&
-       myidx=$(ls -1 .git/objects/pack/*.idx) &&
-       test_path_is_file "$myidx" &&
-       for p in alt_objects/pack/*.idx
-       do
-               git verify-pack -v $p | sed -n -e "/^[0-9a-f]\{40\}/p"
-       done | while read sha1 rest
-       do
-               if ! ( git verify-pack -v $myidx | grep "^$sha1" )
-               then
-                       echo "Missing object in local pack: $sha1"
-                       return 1
-               fi
-       done
+       test_no_missing_in_packs
 '
 
 test_expect_success 'packed obs in alternate ODB kept pack are repacked' '
@@ -156,19 +143,7 @@ test_expect_success 'packed obs in alternate ODB kept pack are repacked' '
                fi
        done &&
        git repack -a -d &&
-       myidx=$(ls -1 .git/objects/pack/*.idx) &&
-       test_path_is_file "$myidx" &&
-       for p in alt_objects/pack/*.idx
-       do
-               git verify-pack -v $p | sed -n -e "/^[0-9a-f]\{40\}/p"
-       done | while read sha1 rest
-       do
-               if ! ( git verify-pack -v $myidx | grep "^$sha1" )
-               then
-                       echo "Missing object in local pack: $sha1"
-                       return 1
-               fi
-       done
+       test_no_missing_in_packs
 '
 
 test_expect_success 'packed unreachable obs in alternate ODB are not loosened' '