]> git.ipfire.org Git - thirdparty/git.git/commitdiff
Merge branch 'ds/test-multi-pack-index'
authorJunio C Hamano <gitster@pobox.com>
Tue, 13 Nov 2018 13:37:19 +0000 (22:37 +0900)
committerJunio C Hamano <gitster@pobox.com>
Tue, 13 Nov 2018 13:37:19 +0000 (22:37 +0900)
Tests for the recently introduced multi-pack index machinery.

* ds/test-multi-pack-index:
  packfile: close multi-pack-index in close_all_packs
  multi-pack-index: define GIT_TEST_MULTI_PACK_INDEX
  midx: close multi-pack-index on repack
  midx: fix broken free() in close_midx()

1  2 
builtin/repack.c
midx.c
midx.h
packfile.c
t/README
t/t5319-multi-pack-index.sh

Simple merge
diff --cc midx.c
Simple merge
diff --cc midx.h
index 1d6c21afe31b62024969f7cb91f9f78b19fe8e52,228016088e7886b0118209c10c5db0a2a9b68ce6..774f652530c42983368149bd9fe42f3ed063ab5d
--- 1/midx.h
--- 2/midx.h
+++ b/midx.h
@@@ -3,9 -3,8 +3,11 @@@
  
  #include "repository.h"
  
 +struct object_id;
 +struct pack_entry;
 +
+ #define GIT_TEST_MULTI_PACK_INDEX "GIT_TEST_MULTI_PACK_INDEX"
  struct multi_pack_index {
        struct multi_pack_index *next;
  
@@@ -45,7 -44,8 +47,9 @@@ int midx_contains_pack(struct multi_pac
  int prepare_multi_pack_index_one(struct repository *r, const char *object_dir, int local);
  
  int write_midx_file(const char *object_dir);
- void clear_midx_file(const char *object_dir);
+ void clear_midx_file(struct repository *r);
 +int verify_midx_file(const char *object_dir);
  
+ void close_midx(struct multi_pack_index *m);
  #endif
diff --cc packfile.c
Simple merge
diff --cc t/README
index 2e9bef28523d95160081852136c2796e39c1e11d,9d0277c338e931a1e35e70803118114b1599e929..242497455f4f448335f7170e7444e5a2f2ff6b7d
+++ b/t/README
@@@ -328,22 -327,10 +328,26 @@@ GIT_TEST_COMMIT_GRAPH=<boolean>, when t
  be written after every 'git commit' command, and overrides the
  'core.commitGraph' setting to true.
  
 +GIT_TEST_FSMONITOR=$PWD/t7519/fsmonitor-all exercises the fsmonitor
 +code path for utilizing a file system monitor to speed up detecting
 +new or changed files.
 +
 +GIT_TEST_INDEX_VERSION=<n> exercises the index read/write code path
 +for the index version specified.  Can be set to any valid version
 +(currently 2, 3, or 4).
 +
 +GIT_TEST_PRELOAD_INDEX=<boolean> exercises the preload-index code path
 +by overriding the minimum number of cache entries required per thread.
 +
 +GIT_TEST_INDEX_THREADS=<n> enables exercising the multi-threaded loading
 +of the index for the whole test suite by bypassing the default number of
 +cache entries and thread minimums. Setting this to 1 will make the
 +index loading single threaded.
 +
+ GIT_TEST_MULTI_PACK_INDEX=<boolean>, when true, forces the multi-pack-
+ index to be written after every 'git repack' command, and overrides the
+ 'core.multiPackIndex' setting to true.
  Naming Tests
  ------------
  
index bd8e841b816bcb45c8c9ad32079e6172b277bb36,4024ff9a399edd2113fedb0f7a7bc19fbd40621f..70926b5bc046430a71aa60c711c2a57b8a43f54e
@@@ -150,128 -150,9 +150,128 @@@ test_expect_success 'write midx with tw
  
  compare_results_with_midx "twelve packs"
  
 +test_expect_success 'verify multi-pack-index success' '
 +      git multi-pack-index verify --object-dir=$objdir
 +'
 +
 +# usage: corrupt_midx_and_verify <pos> <data> <objdir> <string>
 +corrupt_midx_and_verify() {
 +      POS=$1 &&
 +      DATA="${2:-\0}" &&
 +      OBJDIR=$3 &&
 +      GREPSTR="$4" &&
 +      COMMAND="$5" &&
 +      if test -z "$COMMAND"
 +      then
 +              COMMAND="git multi-pack-index verify --object-dir=$OBJDIR"
 +      fi &&
 +      FILE=$OBJDIR/pack/multi-pack-index &&
 +      chmod a+w $FILE &&
 +      test_when_finished mv midx-backup $FILE &&
 +      cp $FILE midx-backup &&
 +      printf "$DATA" | dd of="$FILE" bs=1 seek="$POS" conv=notrunc &&
 +      test_must_fail $COMMAND 2>test_err &&
 +      grep -v "^+" test_err >err &&
 +      test_i18ngrep "$GREPSTR" err
 +}
 +
 +test_expect_success 'verify bad signature' '
 +      corrupt_midx_and_verify 0 "\00" $objdir \
 +              "multi-pack-index signature"
 +'
 +
 +HASH_LEN=20
 +NUM_OBJECTS=74
 +MIDX_BYTE_VERSION=4
 +MIDX_BYTE_OID_VERSION=5
 +MIDX_BYTE_CHUNK_COUNT=6
 +MIDX_HEADER_SIZE=12
 +MIDX_BYTE_CHUNK_ID=$MIDX_HEADER_SIZE
 +MIDX_BYTE_CHUNK_OFFSET=$(($MIDX_HEADER_SIZE + 4))
 +MIDX_NUM_CHUNKS=5
 +MIDX_CHUNK_LOOKUP_WIDTH=12
 +MIDX_OFFSET_PACKNAMES=$(($MIDX_HEADER_SIZE + \
 +                       $MIDX_NUM_CHUNKS * $MIDX_CHUNK_LOOKUP_WIDTH))
 +MIDX_BYTE_PACKNAME_ORDER=$(($MIDX_OFFSET_PACKNAMES + 2))
 +MIDX_OFFSET_OID_FANOUT=$(($MIDX_OFFSET_PACKNAMES + 652))
 +MIDX_OID_FANOUT_WIDTH=4
 +MIDX_BYTE_OID_FANOUT_ORDER=$((MIDX_OFFSET_OID_FANOUT + 250 * $MIDX_OID_FANOUT_WIDTH + 1))
 +MIDX_OFFSET_OID_LOOKUP=$(($MIDX_OFFSET_OID_FANOUT + 256 * $MIDX_OID_FANOUT_WIDTH))
 +MIDX_BYTE_OID_LOOKUP=$(($MIDX_OFFSET_OID_LOOKUP + 16 * $HASH_LEN))
 +MIDX_OFFSET_OBJECT_OFFSETS=$(($MIDX_OFFSET_OID_LOOKUP + $NUM_OBJECTS * $HASH_LEN))
 +MIDX_OFFSET_WIDTH=8
 +MIDX_BYTE_PACK_INT_ID=$(($MIDX_OFFSET_OBJECT_OFFSETS + 16 * $MIDX_OFFSET_WIDTH + 2))
 +MIDX_BYTE_OFFSET=$(($MIDX_OFFSET_OBJECT_OFFSETS + 16 * $MIDX_OFFSET_WIDTH + 6))
 +
 +test_expect_success 'verify bad version' '
 +      corrupt_midx_and_verify $MIDX_BYTE_VERSION "\00" $objdir \
 +              "multi-pack-index version"
 +'
 +
 +test_expect_success 'verify bad OID version' '
 +      corrupt_midx_and_verify $MIDX_BYTE_OID_VERSION "\02" $objdir \
 +              "hash version"
 +'
 +
 +test_expect_success 'verify truncated chunk count' '
 +      corrupt_midx_and_verify $MIDX_BYTE_CHUNK_COUNT "\01" $objdir \
 +              "missing required"
 +'
 +
 +test_expect_success 'verify extended chunk count' '
 +      corrupt_midx_and_verify $MIDX_BYTE_CHUNK_COUNT "\07" $objdir \
 +              "terminating multi-pack-index chunk id appears earlier than expected"
 +'
 +
 +test_expect_success 'verify missing required chunk' '
 +      corrupt_midx_and_verify $MIDX_BYTE_CHUNK_ID "\01" $objdir \
 +              "missing required"
 +'
 +
 +test_expect_success 'verify invalid chunk offset' '
 +      corrupt_midx_and_verify $MIDX_BYTE_CHUNK_OFFSET "\01" $objdir \
 +              "invalid chunk offset (too large)"
 +'
 +
 +test_expect_success 'verify packnames out of order' '
 +      corrupt_midx_and_verify $MIDX_BYTE_PACKNAME_ORDER "z" $objdir \
 +              "pack names out of order"
 +'
 +
 +test_expect_success 'verify packnames out of order' '
 +      corrupt_midx_and_verify $MIDX_BYTE_PACKNAME_ORDER "a" $objdir \
 +              "failed to load pack"
 +'
 +
 +test_expect_success 'verify oid fanout out of order' '
 +      corrupt_midx_and_verify $MIDX_BYTE_OID_FANOUT_ORDER "\01" $objdir \
 +              "oid fanout out of order"
 +'
 +
 +test_expect_success 'verify oid lookup out of order' '
 +      corrupt_midx_and_verify $MIDX_BYTE_OID_LOOKUP "\00" $objdir \
 +              "oid lookup out of order"
 +'
 +
 +test_expect_success 'verify incorrect pack-int-id' '
 +      corrupt_midx_and_verify $MIDX_BYTE_PACK_INT_ID "\07" $objdir \
 +              "bad pack-int-id"
 +'
 +
 +test_expect_success 'verify incorrect offset' '
 +      corrupt_midx_and_verify $MIDX_BYTE_OFFSET "\07" $objdir \
 +              "incorrect object offset"
 +'
 +
 +test_expect_success 'git-fsck incorrect offset' '
 +      corrupt_midx_and_verify $MIDX_BYTE_OFFSET "\07" $objdir \
 +              "incorrect object offset" \
 +              "git -c core.multipackindex=true fsck"
 +'
 +
  test_expect_success 'repack removes multi-pack-index' '
        test_path_is_file $objdir/pack/multi-pack-index &&
-       git repack -adf &&
+       GIT_TEST_MULTI_PACK_INDEX=0 git repack -adf &&
        test_path_is_missing $objdir/pack/multi-pack-index
  '