]> git.ipfire.org Git - thirdparty/git.git/blobdiff - upload-pack.c
Merge branch 'en/sparse-with-submodule-doc'
[thirdparty/git.git] / upload-pack.c
index 19b342d4b054bb3475dd36458203a5de18b06068..bc7e3ca19dd4deea074b0680083f4fde1c5b1910 100644 (file)
@@ -53,11 +53,6 @@ static timestamp_t oldest_have;
 static unsigned int allow_unadvertised_object_request;
 static int shallow_nr;
 static struct object_array extra_edge_obj;
-static const char *pack_objects_hook;
-
-static int allow_ref_in_want;
-
-static int allow_sideband_all;
 
 /*
  * Please annotate, and if possible group together, fields used only
@@ -92,6 +87,8 @@ struct upload_pack_data {
 
        struct packet_writer writer;
 
+       const char *pack_objects_hook;
+
        unsigned stateless_rpc : 1;                             /* v0 only */
        unsigned no_done : 1;                                   /* v0 only */
        unsigned daemon_mode : 1;                               /* v0 only */
@@ -104,6 +101,8 @@ struct upload_pack_data {
        unsigned allow_filter : 1;
 
        unsigned done : 1;                                      /* v2 only */
+       unsigned allow_ref_in_want : 1;                         /* v2 only */
+       unsigned allow_sideband_all : 1;                        /* v2 only */
 };
 
 static void upload_pack_data_init(struct upload_pack_data *data)
@@ -139,6 +138,8 @@ static void upload_pack_data_clear(struct upload_pack_data *data)
        object_array_clear(&data->shallows);
        string_list_clear(&data->deepen_not, 0);
        list_objects_filter_release(&data->filter_options);
+
+       free((char *)data->pack_objects_hook);
 }
 
 static void reset_timeout(unsigned int timeout)
@@ -183,10 +184,10 @@ static void create_pack_file(struct upload_pack_data *pack_data)
        int i;
        FILE *pipe_fd;
 
-       if (!pack_objects_hook)
+       if (!pack_data->pack_objects_hook)
                pack_objects.git_cmd = 1;
        else {
-               argv_array_push(&pack_objects.args, pack_objects_hook);
+               argv_array_push(&pack_objects.args, pack_data->pack_objects_hook);
                argv_array_push(&pack_objects.args, "git");
                pack_objects.use_shell = 1;
        }
@@ -1145,9 +1146,9 @@ static int upload_pack_config(const char *var, const char *value, void *cb_data)
        } else if (!strcmp("uploadpack.allowfilter", var)) {
                data->allow_filter = git_config_bool(var, value);
        } else if (!strcmp("uploadpack.allowrefinwant", var)) {
-               allow_ref_in_want = git_config_bool(var, value);
+               data->allow_ref_in_want = git_config_bool(var, value);
        } else if (!strcmp("uploadpack.allowsidebandall", var)) {
-               allow_sideband_all = git_config_bool(var, value);
+               data->allow_sideband_all = git_config_bool(var, value);
        } else if (!strcmp("core.precomposeunicode", var)) {
                precomposed_unicode = git_config_bool(var, value);
        }
@@ -1155,7 +1156,7 @@ static int upload_pack_config(const char *var, const char *value, void *cb_data)
        if (current_config_scope() != CONFIG_SCOPE_LOCAL &&
        current_config_scope() != CONFIG_SCOPE_WORKTREE) {
                if (!strcmp("uploadpack.packobjectshook", var))
-                       return git_config_string(&pack_objects_hook, var, value);
+                       return git_config_string(&data->pack_objects_hook, var, value);
        }
 
        return parse_hide_refs_config(var, value, "uploadpack");
@@ -1289,7 +1290,7 @@ static void process_args(struct packet_reader *request,
                /* process want */
                if (parse_want(&data->writer, arg, &data->want_obj))
                        continue;
-               if (allow_ref_in_want &&
+               if (data->allow_ref_in_want &&
                    parse_want_ref(&data->writer, arg, &data->wanted_refs,
                                   &data->want_obj))
                        continue;
@@ -1342,7 +1343,7 @@ static void process_args(struct packet_reader *request,
                }
 
                if ((git_env_bool("GIT_TEST_SIDEBAND_ALL", 0) ||
-                    allow_sideband_all) &&
+                    data->allow_sideband_all) &&
                    !strcmp(arg, "sideband-all")) {
                        data->writer.use_sideband = 1;
                        continue;