]> git.ipfire.org Git - thirdparty/git.git/commitdiff
send-pack: never fetch when checking exclusions
authorJonathan Tan <jonathantanmy@google.com>
Tue, 8 Oct 2019 18:37:39 +0000 (11:37 -0700)
committerJunio C Hamano <gitster@pobox.com>
Wed, 9 Oct 2019 01:46:41 +0000 (10:46 +0900)
When building the packfile to be sent, send_pack() is given a list of
remote refs to be used as exclusions. For each ref, it first checks if
the ref exists locally, and if it does, passes it with a "^" prefix to
pack-objects. However, in a partial clone, the check may trigger a lazy
fetch.

The additional commit ancestry information obtained during such fetches
may show that certain objects that would have been sent are already
known to the server, resulting in a smaller pack being sent. But this is
at the cost of fetching from many possibly unrelated refs, and the lazy
fetches do not help at all in the typical case where the client is
up-to-date with the upstream of the branch being pushed.

Ensure that these lazy fetches do not occur.

Signed-off-by: Jonathan Tan <jonathantanmy@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
send-pack.c

index 6dc16c3211631402432207dcf99b1ef4e87f012b..34c77cbb1af91dd1a959f7e9f5b756dc40fd722d 100644 (file)
@@ -40,7 +40,8 @@ int option_parse_push_signed(const struct option *opt,
 
 static void feed_object(const struct object_id *oid, FILE *fh, int negative)
 {
-       if (negative && !has_object_file(oid))
+       if (negative &&
+           !has_object_file_with_flags(oid, OBJECT_INFO_SKIP_FETCH_OBJECT))
                return;
 
        if (negative)