]> git.ipfire.org Git - thirdparty/git.git/commitdiff
submodule--helper: don't recreate recursive prefix
authorGlen Choo <chooglen@google.com>
Fri, 1 Jul 2022 02:11:53 +0000 (19:11 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 1 Jul 2022 05:41:45 +0000 (22:41 -0700)
update_submodule() uses duplicated code to compute
update_data->displaypath and next.recursive_prefix. The latter is just
the former with "/" appended to it, and since update_data->displaypath
not changed outside of this statement, we can just reuse the already
computed result.

We can go one step further and remove the reference to
next.recursive_prefix altogether. Since it is only used in
update_data_to_args() (to compute the "--recursive-prefix" flag for the
recursive update child process) we can just use the already computed
.displaypath value of there.

Delete the duplicated code, and remove the unnecessary reference to
next.recursive_prefix. As a bonus, this fixes a memory leak where
prefixed_path was never freed (this leak was first reported in [1]).

[1] https://lore.kernel.org/git/877a45867ae368bf9e053caedcb6cf421e02344d.1655336146.git.gitgitgadget@gmail.com

Signed-off-by: Glen Choo <chooglen@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/submodule--helper.c

index 08ca18af49ecdd1f6fcfc9a298e156cf3c569b96..455e6766c36c74f54c8532140ebd2bf965948b56 100644 (file)
@@ -2417,9 +2417,10 @@ static void update_data_to_args(struct update_data *update_data, struct strvec *
 
        strvec_pushl(args, "submodule--helper", "update", "--recursive", NULL);
        strvec_pushf(args, "--jobs=%d", update_data->max_jobs);
-       if (update_data->recursive_prefix)
-               strvec_pushl(args, "--recursive-prefix",
-                            update_data->recursive_prefix, NULL);
+       if (update_data->displaypath) {
+               strvec_push(args, "--recursive-prefix");
+               strvec_pushf(args, "%s/", update_data->displaypath);
+       }
        if (update_data->quiet)
                strvec_push(args, "--quiet");
        if (update_data->force)
@@ -2515,14 +2516,6 @@ static int update_submodule(struct update_data *update_data)
                struct update_data next = *update_data;
                int res;
 
-               if (update_data->recursive_prefix)
-                       prefixed_path = xstrfmt("%s%s/", update_data->recursive_prefix,
-                                               update_data->sm_path);
-               else
-                       prefixed_path = xstrfmt("%s/", update_data->sm_path);
-
-               next.recursive_prefix = get_submodule_displaypath(prefixed_path,
-                                                                 update_data->prefix);
                next.prefix = NULL;
                oidcpy(&next.oid, null_oid());
                oidcpy(&next.suboid, null_oid());