mirror of
https://github.com/git/git.git
synced 2024-11-23 18:05:29 +08:00
fcb2205b77
Now that the rest of the MIDX subsystem and relevant callers have been updated to learn about how to read and process incremental MIDX chains, let's finally update the implementation in `write_midx_internal()` to be able to write incremental MIDX chains. This new feature is available behind the `--incremental` option for the `multi-pack-index` builtin, like so: $ git multi-pack-index write --incremental The implementation for doing so is relatively straightforward, and boils down to a handful of different kinds of changes implemented in this patch: - The `compute_sorted_entries()` function is taught to reject objects which appear in any existing MIDX layer. - Functions like `write_midx_revindex()` are adjusted to write pack_order values which are offset by the number of objects in the base MIDX layer. - The end of `write_midx_internal()` is adjusted to move non-incremental MIDX files when necessary (i.e. when creating an incremental chain with an existing non-incremental MIDX in the repository). There are a handful of other changes that are introduced, like new functions to clear incremental MIDX files that are unrelated to the current chain (using the same "keep_hash" mechanism as in the non-incremental case). The tests explicitly exercising the new incremental MIDX feature are relatively limited for two reasons: 1. Most of the "interesting" behavior is already thoroughly covered in t5319-multi-pack-index.sh, which handles the core logic of reading objects through a MIDX. The new tests in t5334-incremental-multi-pack-index.sh are mostly focused on creating and destroying incremental MIDXs, as well as stitching their results together across layers. 2. A new GIT_TEST environment variable is added called "GIT_TEST_MULTI_PACK_INDEX_WRITE_INCREMENTAL", which modifies the entire test suite to write incremental MIDXs after repacking when combined with the "GIT_TEST_MULTI_PACK_INDEX" variable. This exercises the long tail of other interesting behavior that is defined implicitly throughout the rest of the CI suite. It is likewise added to the linux-TEST-vars job. Signed-off-by: Taylor Blau <me@ttaylorr.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
37 lines
1018 B
Bash
37 lines
1018 B
Bash
# test_midx_consistent <objdir>
|
|
test_midx_consistent () {
|
|
ls $1/pack/pack-*.idx | xargs -n 1 basename | sort >expect &&
|
|
test-tool read-midx $1 | grep ^pack-.*\.idx$ | sort >actual &&
|
|
|
|
test_cmp expect actual &&
|
|
git multi-pack-index --object-dir=$1 verify
|
|
}
|
|
|
|
midx_checksum () {
|
|
test-tool read-midx --checksum "$1"
|
|
}
|
|
|
|
midx_git_two_modes () {
|
|
git -c core.multiPackIndex=false $1 >expect &&
|
|
git -c core.multiPackIndex=true $1 >actual &&
|
|
if [ "$2" = "sorted" ]
|
|
then
|
|
sort <expect >expect.sorted &&
|
|
mv expect.sorted expect &&
|
|
sort <actual >actual.sorted &&
|
|
mv actual.sorted actual
|
|
fi &&
|
|
test_cmp expect actual
|
|
}
|
|
|
|
compare_results_with_midx () {
|
|
MSG=$1
|
|
test_expect_success "check normal git operations: $MSG" '
|
|
midx_git_two_modes "rev-list --objects --all" &&
|
|
midx_git_two_modes "log --raw" &&
|
|
midx_git_two_modes "count-objects --verbose" &&
|
|
midx_git_two_modes "cat-file --batch-all-objects --batch-check" &&
|
|
midx_git_two_modes "cat-file --batch-all-objects --batch-check --unordered" sorted
|
|
'
|
|
}
|