Skip to content

Commit a0401ef

Browse files
derrickstoleedscho
authored andcommitted
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>
1 parent 72210eb commit a0401ef

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

t/t5309-pack-delta-cycles.sh

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,4 +105,30 @@ test_expect_success 'index-pack works with thin pack A->B->C with B on disk' '
105105
)
106106
'
107107

108+
test_expect_failure 'index-pack works with thin pack A->B->C with B on disk' '
109+
git init server &&
110+
(
111+
cd server &&
112+
test_commit_bulk 4
113+
) &&
114+
115+
A=$(git -C server rev-parse HEAD^{tree}) &&
116+
B=$(git -C server rev-parse HEAD~1^{tree}) &&
117+
C=$(git -C server rev-parse HEAD~2^{tree}) &&
118+
git -C server reset --hard HEAD~1 &&
119+
120+
cat >in <<-EOF &&
121+
REF_DELTA $A $B
122+
REF_DELTA $B $C
123+
EOF
124+
125+
test-tool -C server pack-deltas 2 <in >thin.pack &&
126+
127+
git clone "file://$(pwd)/server" client &&
128+
(
129+
cd client &&
130+
git index-pack --fix-thin --stdin <../thin.pack
131+
)
132+
'
133+
108134
test_done

0 commit comments

Comments
 (0)