git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 2/4] apply: do not lazy fetch when applying binary

From
JTJonathan Tan <jonathantanmy@google.com>
Date
Aug 5, 2020, 23:06 UTC
Message-ID
<fa09987fb010042fdcbd3ce539b783b92bb640d6.1596668156.git.jonathantanmy@google.com>
In-Reply-To
<cover.1596668156.git.jonathantanmy@google.com>

When applying a binary patch, as an optimization, "apply" checks if the postimage is already present. During this fetch, it is perfectly expected for the postimage not to be present, so there is no need to lazy-fetch missing objects. Teach "apply" not to lazy-fetch in this case.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
---
 apply.c       |  2 +-
 t/t4150-am.sh | 16 ++++++++++++++++
 2 files changed, 17 insertions(+), 1 deletion(-)
diff --git a/apply.c b/apply.c
index 8bff604dbe..402d80602a 100644
--- a/apply.c
+++ b/apply.c
@@ -3178,7 +3178,7 @@ static int apply_binary(struct apply_state *state,
 		return 0; /* deletion patch */
 	}
 
-	if (has_object_file(&oid)) {
+	if (has_object(the_repository, &oid, 0)) {
 		/* We already have the postimage */
 		enum object_type type;
 		unsigned long size;
diff --git a/t/t4150-am.sh b/t/t4150-am.sh
index bda4586a79..94a2c76522 100755
--- a/t/t4150-am.sh
+++ b/t/t4150-am.sh
@@ -1133,4 +1133,20 @@ test_expect_success 'am and .gitattibutes' '
 	)
 '
 
+test_expect_success 'apply binary blob in partial clone' '
+	printf "\\000" >binary &&
+	git add binary &&
+	git commit -m "binary blob" &&
+	git format-patch --stdout -m HEAD^ >patch &&
+
+	test_create_repo server &&
+	test_config -C server uploadpack.allowfilter 1 &&
+	test_config -C server uploadpack.allowanysha1inwant 1 &&
+	git clone --filter=blob:none "file://$(pwd)/server" client &&
+	test_when_finished "rm -rf client" &&
+
+	# Exercise to make sure that it works
+	git -C client am ../patch
+'
+
 test_done
-- 
2.28.0.236.gb10cc79966-goog
Previous: Jonathan TanNext: Junio C Hamano
Message 8 of 9 in “apply: do not fetch when checking object existence”
  1. apply: do not fetch when checking object existenceJonathan Tan, Jul 28, 2020
  2. Junio C HamanoJul 28, 2020
  3. Jonathan TanJul 28, 2020
  4. 0/4 No-lazy-fetch has_object() and some fixesJonathan Tan, Aug 5, 2020
  5. 1/4 sha1-file: introduce no-lazy-fetch has_object()Jonathan Tan, Aug 5, 2020
  6. 3/4 pack-objects: no fetch when allow-{any,promisor}Jonathan Tan, Aug 5, 2020
  7. 4/4 fsck: do not lazy fetch known non-promisor objectJonathan Tan, Aug 5, 2020
  8. 2/4 apply: do not lazy fetch when applying binaryJonathan Tan, Aug 5, 2020
  9. Junio C HamanoAug 6, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.