]> git.ipfire.org Git - thirdparty/git.git/blobdiff - send-pack.c
v0 protocol: use size_t for capability length/offset
[thirdparty/git.git] / send-pack.c
index bc0fcdbb000769935e9f080164d8e02e81dbb8b3..97344b629eef01299ceae03561d94d167789038f 100644 (file)
@@ -1,6 +1,8 @@
-#include "builtin.h"
+#include "git-compat-util.h"
 #include "config.h"
 #include "commit.h"
+#include "gettext.h"
+#include "hex.h"
 #include "refs.h"
 #include "object-store.h"
 #include "pkt-line.h"
 #include "version.h"
 #include "oid-array.h"
 #include "gpg-interface.h"
-#include "cache.h"
 #include "shallow.h"
+#include "parse-options.h"
+#include "trace2.h"
+#include "write-or-die.h"
 
 int option_parse_push_signed(const struct option *opt,
                             const char *arg, int unset)
@@ -42,9 +46,9 @@ 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_with_flags(oid,
-                                       OBJECT_INFO_SKIP_FETCH_OBJECT |
-                                       OBJECT_INFO_QUICK))
+           !repo_has_object_file_with_flags(the_repository, oid,
+                                            OBJECT_INFO_SKIP_FETCH_OBJECT |
+                                            OBJECT_INFO_QUICK))
                return;
 
        if (negative)
@@ -84,6 +88,8 @@ static int pack_objects(int fd, struct ref *refs, struct oid_array *advertised,
                strvec_push(&po.args, "--progress");
        if (is_repository_shallow(the_repository))
                strvec_push(&po.args, "--shallow");
+       if (args->disable_bitmaps)
+               strvec_push(&po.args, "--no-use-bitmap-index");
        po.in = -1;
        po.out = args->stateless_rpc ? -1 : fd;
        po.git_cmd = 1;
@@ -264,7 +270,7 @@ static int receive_status(struct packet_reader *reader, struct ref *refs)
        return ret;
 }
 
-static int sideband_demux(int in, int out, void *data)
+static int sideband_demux(int in UNUSED, int out, void *data)
 {
        int *fd = data, ret;
        if (async_with_fork())
@@ -487,6 +493,7 @@ int send_pack(struct send_pack_args *args,
        struct async demux;
        const char *push_cert_nonce = NULL;
        struct packet_reader reader;
+       int use_bitmaps;
 
        if (!remote_refs) {
                fprintf(stderr, "No refs in common and none specified; doing nothing.\n"
@@ -498,6 +505,9 @@ int send_pack(struct send_pack_args *args,
        if (push_negotiate)
                get_commons_through_negotiation(args->url, remote_refs, &commons);
 
+       if (!git_config_get_bool("push.usebitmaps", &use_bitmaps))
+               args->disable_bitmaps = !use_bitmaps;
+
        git_config_get_bool("transfer.advertisesid", &advertise_sid);
 
        /* Does the other end support the reporting? */
@@ -528,7 +538,7 @@ int send_pack(struct send_pack_args *args,
                die(_("the receiving end does not support this repository's hash algorithm"));
 
        if (args->push_cert != SEND_PACK_PUSH_CERT_NEVER) {
-               int len;
+               size_t len;
                push_cert_nonce = server_feature_value("push-cert", &len);
                if (push_cert_nonce) {
                        reject_invalid_nonce(push_cert_nonce, len);