| #!/bin/sh |
| |
| test_description='rev-list with .keep packs' |
| |
| TEST_PASSES_SANITIZE_LEAK=true |
| . ./test-lib.sh |
| |
| test_expect_success 'setup' ' |
| test_commit loose && |
| test_commit packed && |
| test_commit kept && |
| |
| KEPT_PACK=$(git pack-objects --revs .git/objects/pack/pack <<-EOF |
| refs/tags/kept |
| ^refs/tags/packed |
| EOF |
| ) && |
| MISC_PACK=$(git pack-objects --revs .git/objects/pack/pack <<-EOF |
| refs/tags/packed |
| ^refs/tags/loose |
| EOF |
| ) && |
| |
| touch .git/objects/pack/pack-$KEPT_PACK.keep |
| ' |
| |
| rev_list_objects () { |
| git rev-list "$@" >out && |
| sort out |
| } |
| |
| idx_objects () { |
| git show-index <$1 >expect-idx && |
| cut -d" " -f2 <expect-idx | sort |
| } |
| |
| test_expect_success '--no-kept-objects excludes trees and blobs in .keep packs' ' |
| rev_list_objects --objects --all --no-object-names >kept && |
| rev_list_objects --objects --all --no-object-names --no-kept-objects >no-kept && |
| |
| idx_objects .git/objects/pack/pack-$KEPT_PACK.idx >expect && |
| comm -3 kept no-kept >actual && |
| |
| test_cmp expect actual |
| ' |
| |
| test_expect_success '--no-kept-objects excludes kept non-MIDX object' ' |
| test_config core.multiPackIndex true && |
| |
| # Create a pack with just the commit object in pack, and do not mark it |
| # as kept (even though it appears in $KEPT_PACK, which does have a .keep |
| # file). |
| MIDX_PACK=$(git pack-objects .git/objects/pack/pack <<-EOF |
| $(git rev-parse kept) |
| EOF |
| ) && |
| |
| # Write a MIDX containing all packs, but use the version of the commit |
| # at "kept" in a non-kept pack by touching $MIDX_PACK. |
| touch .git/objects/pack/pack-$MIDX_PACK.pack && |
| git multi-pack-index write && |
| |
| rev_list_objects --objects --no-object-names --no-kept-objects HEAD >actual && |
| ( |
| idx_objects .git/objects/pack/pack-$MISC_PACK.idx && |
| git rev-list --objects --no-object-names refs/tags/loose |
| ) | sort >expect && |
| test_cmp expect actual |
| ' |
| |
| test_done |