diff options
Diffstat (limited to 't/t5309-pack-delta-cycles.sh')
| -rwxr-xr-x | t/t5309-pack-delta-cycles.sh | 34 |
1 files changed, 32 insertions, 2 deletions
diff --git a/t/t5309-pack-delta-cycles.sh b/t/t5309-pack-delta-cycles.sh index 60fc710bac..6b03675d91 100755 --- a/t/t5309-pack-delta-cycles.sh +++ b/t/t5309-pack-delta-cycles.sh @@ -60,7 +60,10 @@ test_expect_success 'index-pack detects REF_DELTA cycles' ' test_expect_success 'failover to an object in another pack' ' clear_packs && git index-pack --stdin <ab.pack && - test_must_fail git index-pack --stdin --fix-thin <cycle.pack + + # This cycle does not fail since the existence of A & B in + # the repo allows us to resolve the cycle. + git index-pack --stdin --fix-thin <cycle.pack ' test_expect_success 'failover to a duplicate object in the same pack' ' @@ -72,7 +75,34 @@ test_expect_success 'failover to a duplicate object in the same pack' ' pack_obj $A } >recoverable.pack && pack_trailer recoverable.pack && - test_must_fail git index-pack --fix-thin --stdin <recoverable.pack + + # This cycle does not fail since the existence of a full copy + # of A in the pack allows us to resolve the cycle. + git index-pack --fix-thin --stdin <recoverable.pack +' + +test_expect_success 'index-pack works with thin pack A->B->C with B on disk' ' + git init server && + ( + cd server && + test_commit_bulk 4 + ) && + + A=$(git -C server rev-parse HEAD^{tree}) && + B=$(git -C server rev-parse HEAD~1^{tree}) && + C=$(git -C server rev-parse HEAD~2^{tree}) && + git -C server reset --hard HEAD~1 && + + test-tool -C server pack-deltas --num-objects=2 >thin.pack <<-EOF && + REF_DELTA $A $B + REF_DELTA $B $C + EOF + + git clone "file://$(pwd)/server" client && + ( + cd client && + git index-pack --fix-thin --stdin <../thin.pack + ) ' test_done |
