diff options
author | Glen Choo <chooglen@google.com> | 2022-07-01 04:11:53 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2022-07-01 07:41:45 +0200 |
commit | cb49e1e8d342795cbb31c204b5ab744ae9c2e1f3 (patch) | |
tree | b4f6260db9ae5a96d0e363212e4a2446293829e7 /builtin | |
parent | submodule--helper update: use display path helper (diff) | |
download | git-cb49e1e8d342795cbb31c204b5ab744ae9c2e1f3.tar.xz git-cb49e1e8d342795cbb31c204b5ab744ae9c2e1f3.zip |
submodule--helper: don't recreate recursive prefix
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>
Diffstat (limited to 'builtin')
-rw-r--r-- | builtin/submodule--helper.c | 15 |
1 files changed, 4 insertions, 11 deletions
diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c index 08ca18af49..455e6766c3 100644 --- a/builtin/submodule--helper.c +++ b/builtin/submodule--helper.c @@ -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()); |