git@vger.kernel.org list mirror (unofficial, one of many)
 help / color / Atom feed
From: Jonathan Tan <jonathantanmy@google.com>
To: git@vger.kernel.org
Cc: Jonathan Tan <jonathantanmy@google.com>, sandals@crustytoothpaste.net
Subject: [PATCH] t5616: make robust to delta base change
Date: Mon, 13 Jan 2020 12:28:23 -0800
Message-ID: <20200113202823.228062-1-jonathantanmy@google.com> (raw)
In-Reply-To: <20200113123857.3684632-19-sandals@crustytoothpaste.net>

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>
---
Thanks, brian, for bringing this to my attention. I think that the
change in the length of the object hash made the tree a delta and thus
require a lazy-fetch of its delta base. Can you see if this patch
eliminates the need for your t5616 patch?

In any case, this change passes at master and I think should go in
independent of brian's changes - if the delta base algorithm changes for
whatever reason, this is still needed to make the test more robust.
---
 t/t5616-partial-clone.sh | 36 +++++++++++++++++++++++-------------
 1 file changed, 23 insertions(+), 13 deletions(-)

diff --git a/t/t5616-partial-clone.sh b/t/t5616-partial-clone.sh
index fea56cda6d..9a9178fd28 100755
--- a/t/t5616-partial-clone.sh
+++ b/t/t5616-partial-clone.sh
@@ -309,26 +309,36 @@ setup_triangle () {
 
 	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
 	# client that only contains the first commit.
 	git init server &&
 	git -C server config --local uploadpack.allowfilter 1 &&
-	cp big-blob.txt server &&
-	git -C server add big-blob.txt &&
+	for i in $(test_seq 1 100)
+	do
+		echo "make the tree big" >server/file$i &&
+		git -C server add file$i
+	done &&
 	git -C server commit -m "initial" &&
 	git clone --bare --filter=tree:0 "file://$(pwd)/server" client &&
-	echo another line >>server/big-blob.txt &&
-	git -C server commit -am "append line to big blob" &&
+	echo another line >>server/file1 &&
+	git -C server commit -am "incremental change" &&
 
-	# Create a promisor remote that only contains the blob from the first
-	# commit, and 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 blob.
+	# Create a promisor remote that only contains the tree and blob from
+	# the first commit.
 	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
 	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"
 }
 
@@ -341,14 +351,14 @@ test_expect_success 'fetch lazy-fetches only to resolve deltas' '
 	setup_triangle &&
 
 	# 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).
 	GIT_TRACE_PACKET="$(pwd)/trace" git -C client \
 		fetch "file://$(pwd)/server" master &&
 
 	# Verify the assumption that the client needed to fetch the delta base
 	# 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
 '
 
@@ -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
 	# 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
 '
 
-- 
2.25.0.rc1.283.g88dfdc4193-goog


  reply index

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-01-13 12:38 [PATCH 00/24] SHA-256 test fixes, part 8 brian m. carlson
2020-01-13 12:38 ` [PATCH 01/24] t/lib-pack: support SHA-256 brian m. carlson
2020-01-13 12:38 ` [PATCH 02/24] t3206: make hash size independent brian m. carlson
2020-01-13 12:38 ` [PATCH 03/24] t3305: annotate with SHA1 prerequisite brian m. carlson
2020-01-13 12:38 ` [PATCH 04/24] t3308: make test work with SHA-256 brian m. carlson
2020-01-13 12:38 ` [PATCH 05/24] t3309: " brian m. carlson
2020-01-13 12:38 ` [PATCH 06/24] t3310: " brian m. carlson
2020-01-13 12:38 ` [PATCH 07/24] t3311: " brian m. carlson
2020-01-13 12:38 ` [PATCH 08/24] t3404: remove SHA1 prerequisite brian m. carlson
2020-01-13 12:38 ` [PATCH 09/24] t4013: make test hash independent brian m. carlson
2020-01-13 12:38 ` [PATCH 10/24] t4060: make test work with SHA-256 brian m. carlson
2020-01-13 12:38 ` [PATCH 11/24] t4211: make test hash independent brian m. carlson
2020-01-13 12:38 ` [PATCH 12/24] t5302: make hash size independent brian m. carlson
2020-01-13 12:38 ` [PATCH 13/24] t5309: make test hash independent brian m. carlson
2020-01-13 12:38 ` [PATCH 14/24] t5313: " brian m. carlson
2020-01-13 12:38 ` [PATCH 15/24] t5321: " brian m. carlson
2020-01-13 12:38 ` [PATCH 16/24] t5515: " brian m. carlson
2020-01-13 12:38 ` [PATCH 17/24] t5318: update for SHA-256 brian m. carlson
2020-01-13 13:50   ` Eric Sunshine
2020-01-13 23:14     ` brian m. carlson
2020-01-13 12:38 ` [PATCH 18/24] t5616: use correct filter syntax brian m. carlson
2020-01-13 20:28   ` Jonathan Tan [this message]
2020-01-13 23:11     ` [PATCH] t5616: make robust to delta base change brian m. carlson
2020-01-25 22:43     ` brian m. carlson
2020-01-13 12:38 ` [PATCH 19/24] t5607: make hash size independent brian m. carlson
2020-01-13 12:38 ` [PATCH 20/24] t5703: make test work with SHA-256 brian m. carlson
2020-01-13 13:53   ` Eric Sunshine
2020-01-13 23:15     ` brian m. carlson
2020-01-13 12:38 ` [PATCH 21/24] t5703: switch tests to use test_oid brian m. carlson
2020-01-13 12:38 ` [PATCH 22/24] t6000: abstract away SHA-1-specific constants brian m. carlson
2020-01-13 12:38 ` [PATCH 23/24] t6006: make hash size independent brian m. carlson
2020-01-13 12:38 ` [PATCH 24/24] t6024: update for SHA-256 brian m. carlson
2020-01-13 13:41 ` [PATCH 00/24] SHA-256 test fixes, part 8 Eric Sunshine
2020-01-13 23:17   ` brian m. carlson
2020-01-13 23:34     ` Eric Sunshine
2020-01-16  0:28 ` Johannes Schindelin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20200113202823.228062-1-jonathantanmy@google.com \
    --to=jonathantanmy@google.com \
    --cc=git@vger.kernel.org \
    --cc=sandals@crustytoothpaste.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

git@vger.kernel.org list mirror (unofficial, one of many)

Archives are clonable:
	git clone --mirror https://public-inbox.org/git
	git clone --mirror http://ou63pmih66umazou.onion/git
	git clone --mirror http://czquwvybam4bgbro.onion/git
	git clone --mirror http://hjrcffqmbrq6wope.onion/git

Example config snippet for mirrors

Newsgroups are available over NNTP:
	nntp://news.public-inbox.org/inbox.comp.version-control.git
	nntp://ou63pmih66umazou.onion/inbox.comp.version-control.git
	nntp://czquwvybam4bgbro.onion/inbox.comp.version-control.git
	nntp://hjrcffqmbrq6wope.onion/inbox.comp.version-control.git
	nntp://news.gmane.io/gmane.comp.version-control.git

 note: .onion URLs require Tor: https://www.torproject.org/

AGPL code for this site: git clone https://public-inbox.org/public-inbox.git