]> git.ipfire.org Git - thirdparty/git.git/commitdiff
apply: do not lazy fetch when applying binary
authorJonathan Tan <jonathantanmy@google.com>
Wed, 5 Aug 2020 23:06:50 +0000 (16:06 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 6 Aug 2020 20:01:02 +0000 (13:01 -0700)
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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
apply.c
t/t4150-am.sh

diff --git a/apply.c b/apply.c
index 8bff604dbe203402d93bd13fe5b03d635a7a50ee..402d80602ac20a4f2ec5768903d4968843196cb4 100644 (file)
--- 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;
index bda4586a7951a234b50ffbb28cdd4d7df05e4c56..94a2c76522e8e6f5fb21515a040d011b9b042e0b 100755 (executable)
@@ -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