t5309: create failing test for 'git index-pack'
This new test demonstrates some behavior where a valid packfile is being rejected by the Git client due to the order in which it is resolving REF_DELTAs. The thin packfile has a REF_DELTA chain A->B->C where C is not included in the packfile. However, the client repository contains both C and B already. Thus, 'git index-pack' is able to resolve A before resolving B. When resolving B, it then attempts to resolve any other REF_DELTAs that are pointing to B as a base. This "revisits" A and complains as if there is a cycle, but it did not actually detect a cycle. A fix will arrive in the next change. Signed-off-by: Derrick Stolee <stolee@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Derrick Stolee committed
Apr 28, 2025 at 20:24 UTC
fd7fd7afc975a42dd60c96f57b83f2a4fc7e58c0
1 file changed
+24
t/t5309-pack-delta-cycles.sh
+24
@@ -75,4 +75,28 @@ test_expect_success 'failover to a duplicate object in the same pack' '
75
test_must_fail git index-pack --fix-thin --stdin <recoverable.pack
76
'
77
78
+test_expect_failure 'index-pack works with thin pack A->B->C with B on disk' '
79
+ git init server &&
80
+ (
81
+ cd server &&
82
+ test_commit_bulk 4
83
+ ) &&
84
+
85
+ A=$(git -C server rev-parse HEAD^{tree}) &&
86
+ B=$(git -C server rev-parse HEAD~1^{tree}) &&
87
+ C=$(git -C server rev-parse HEAD~2^{tree}) &&
88
+ git -C server reset --hard HEAD~1 &&
89
+
90
+ test-tool -C server pack-deltas --num-objects=2 >thin.pack <<-EOF &&
91
+ REF_DELTA $A $B
92
+ REF_DELTA $B $C
93
+ EOF
94
+
95
+ git clone "file://$(pwd)/server" client &&
96
+ (
97
+ cd client &&
98
+ git index-pack --fix-thin --stdin <../thin.pack
99
+ )
100
+'
101
+
102
test_done