зеркало из https://github.com/microsoft/git.git
t5616: make robust to delta base change
Commit 6462d5eb9a
("fetch: remove fetch_if_missing=0", 2019-11-08)
contains a test that relies on having to lazily fetch the delta base of
a blob, but assumes that the tree being fetched (as part of the test) is
sent as a non-delta object. This assumption may not hold in the future;
for example, a change in the length of the object hash might result in
the tree being sent as a delta instead.
Make the test more robust by relying on having to lazily fetch the delta
base of the tree instead, and by making no assumptions on whether the
blobs are sent as delta or non-delta.
Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
a0ba80001a
Коммит
b54128bb0b
|
@ -309,26 +309,36 @@ setup_triangle () {
|
||||||
|
|
||||||
printf "line %d\n" $(test_seq 1 100) >big-blob.txt &&
|
printf "line %d\n" $(test_seq 1 100) >big-blob.txt &&
|
||||||
|
|
||||||
# Create a server with 2 commits: a commit with a big blob and a child
|
# Create a server with 2 commits: a commit with a big tree and a child
|
||||||
# commit with an incremental change. Also, create a partial clone
|
# commit with an incremental change. Also, create a partial clone
|
||||||
# client that only contains the first commit.
|
# client that only contains the first commit.
|
||||||
git init server &&
|
git init server &&
|
||||||
git -C server config --local uploadpack.allowfilter 1 &&
|
git -C server config --local uploadpack.allowfilter 1 &&
|
||||||
cp big-blob.txt server &&
|
for i in $(test_seq 1 100)
|
||||||
git -C server add big-blob.txt &&
|
do
|
||||||
|
echo "make the tree big" >server/file$i &&
|
||||||
|
git -C server add file$i
|
||||||
|
done &&
|
||||||
git -C server commit -m "initial" &&
|
git -C server commit -m "initial" &&
|
||||||
git clone --bare --filter=tree:0 "file://$(pwd)/server" client &&
|
git clone --bare --filter=tree:0 "file://$(pwd)/server" client &&
|
||||||
echo another line >>server/big-blob.txt &&
|
echo another line >>server/file1 &&
|
||||||
git -C server commit -am "append line to big blob" &&
|
git -C server commit -am "incremental change" &&
|
||||||
|
|
||||||
# Create a promisor remote that only contains the blob from the first
|
# Create a promisor remote that only contains the tree and blob from
|
||||||
# commit, and set it as the promisor remote of client. Thus, whenever
|
# the first commit.
|
||||||
# the client lazy fetches, the lazy fetch will succeed only if it is
|
|
||||||
# for this blob.
|
|
||||||
git init promisor-remote &&
|
git init promisor-remote &&
|
||||||
|
git -C server config --local uploadpack.allowanysha1inwant 1 &&
|
||||||
|
TREE_HASH=$(git -C server rev-parse HEAD~1^{tree}) &&
|
||||||
|
git -C promisor-remote fetch --keep "file://$(pwd)/server" "$TREE_HASH" &&
|
||||||
|
git -C promisor-remote count-objects -v >object-count &&
|
||||||
|
test_i18ngrep "count: 0" object-count &&
|
||||||
|
test_i18ngrep "in-pack: 2" object-count &&
|
||||||
|
|
||||||
|
# Set it as the promisor remote of client. Thus, whenever
|
||||||
|
# the client lazy fetches, the lazy fetch will succeed only if it is
|
||||||
|
# for this tree or blob.
|
||||||
test_commit -C promisor-remote one && # so that ref advertisement is not empty
|
test_commit -C promisor-remote one && # so that ref advertisement is not empty
|
||||||
git -C promisor-remote config --local uploadpack.allowanysha1inwant 1 &&
|
git -C promisor-remote config --local uploadpack.allowanysha1inwant 1 &&
|
||||||
git -C promisor-remote hash-object -w --stdin <big-blob.txt &&
|
|
||||||
git -C client remote set-url origin "file://$(pwd)/promisor-remote"
|
git -C client remote set-url origin "file://$(pwd)/promisor-remote"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -341,14 +351,14 @@ test_expect_success 'fetch lazy-fetches only to resolve deltas' '
|
||||||
setup_triangle &&
|
setup_triangle &&
|
||||||
|
|
||||||
# Exercise to make sure it works. Git will not fetch anything from the
|
# Exercise to make sure it works. Git will not fetch anything from the
|
||||||
# promisor remote other than for the big blob (because it needs to
|
# promisor remote other than for the big tree (because it needs to
|
||||||
# resolve the delta).
|
# resolve the delta).
|
||||||
GIT_TRACE_PACKET="$(pwd)/trace" git -C client \
|
GIT_TRACE_PACKET="$(pwd)/trace" git -C client \
|
||||||
fetch "file://$(pwd)/server" master &&
|
fetch "file://$(pwd)/server" master &&
|
||||||
|
|
||||||
# Verify the assumption that the client needed to fetch the delta base
|
# Verify the assumption that the client needed to fetch the delta base
|
||||||
# to resolve the delta.
|
# to resolve the delta.
|
||||||
git hash-object big-blob.txt >hash &&
|
git -C server rev-parse HEAD~1^{tree} >hash &&
|
||||||
grep "want $(cat hash)" trace
|
grep "want $(cat hash)" trace
|
||||||
'
|
'
|
||||||
|
|
||||||
|
@ -370,7 +380,7 @@ test_expect_success 'fetch lazy-fetches only to resolve deltas, protocol v2' '
|
||||||
|
|
||||||
# Verify the assumption that the client needed to fetch the delta base
|
# Verify the assumption that the client needed to fetch the delta base
|
||||||
# to resolve the delta.
|
# to resolve the delta.
|
||||||
git hash-object big-blob.txt >hash &&
|
git -C server rev-parse HEAD~1^{tree} >hash &&
|
||||||
grep "want $(cat hash)" trace
|
grep "want $(cat hash)" trace
|
||||||
'
|
'
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче