Message ID | 20231121203413.176414-1-heftig@archlinux.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [v2,1/6] submodule--helper: use submodule_from_path in set-{url,branch} | expand |
"Jan Alexander Steffens (heftig)" <heftig@archlinux.org> writes: > Notes: > v2 changes: > - fixed code style > - replaced potentially unsafe use of `sub->path` with `path` Hasn't the previous iteration of this topic long been merged to not just 'next' but to 'master' and appears in a released version of Git? We are all human, so mistakes are inevitable, but if we discover a mistake that needs fixing after a topic hits 'next', we take it as a sign that the particular mistake was easy to make and hard to spot, and the fix for it deserves its own explanation. Please make an incremental update on top of what has already been merged with a good explanation (explain why sub->path is "potentially unsafe" and why using path is better, for example). Thanks.
On Wed, 2023-11-22 at 16:54 +0900, Junio C Hamano wrote: > "Jan Alexander Steffens (heftig)" <heftig@archlinux.org> writes: > > > Notes: > > v2 changes: > > - fixed code style > > - replaced potentially unsafe use of `sub->path` with > > `path` > > Hasn't the previous iteration of this topic long been merged to not > just 'next' but to 'master' and appears in a released version of Git? > > We are all human, so mistakes are inevitable, but if we discover a > mistake that needs fixing after a topic hits 'next', we take it as a > sign that the particular mistake was easy to make and hard to spot, > and the fix for it deserves its own explanation. Please make an > incremental update on top of what has already been merged with a > good explanation (explain why sub->path is "potentially unsafe" and > why using path is better, for example). > > Thanks. So it has. I'm sorry. I was only keeping track of the 'maint' branch.
diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c index 6f3bf33e61..af461ada8b 100644 --- a/builtin/submodule--helper.c +++ b/builtin/submodule--helper.c @@ -2901,19 +2901,26 @@ static int module_set_url(int argc, const char **argv, const char *prefix) N_("git submodule set-url [--quiet] <path> <newurl>"), NULL }; + const struct submodule *sub; argc = parse_options(argc, argv, prefix, options, usage, 0); if (argc != 2 || !(path = argv[0]) || !(newurl = argv[1])) usage_with_options(usage, options); - config_name = xstrfmt("submodule.%s.url", path); + sub = submodule_from_path(the_repository, null_oid(), path); + if (!sub) + die(_("no submodule mapping found in .gitmodules for path '%s'"), + path); + + config_name = xstrfmt("submodule.%s.url", sub->name); config_set_in_gitmodules_file_gently(config_name, newurl); + + repo_read_gitmodules(the_repository, 0); sync_submodule(path, prefix, NULL, quiet ? OPT_QUIET : 0); free(config_name); - return 0; } @@ -2941,19 +2948,26 @@ static int module_set_branch(int argc, const char **argv, const char *prefix) N_("git submodule set-branch [-q|--quiet] (-b|--branch) <branch> <path>"), NULL }; + const struct submodule *sub; argc = parse_options(argc, argv, prefix, options, usage, 0); if (!opt_branch && !opt_default) die(_("--branch or --default required")); if (opt_branch && opt_default) die(_("options '%s' and '%s' cannot be used together"), "--branch", "--default"); if (argc != 1 || !(path = argv[0])) usage_with_options(usage, options); - config_name = xstrfmt("submodule.%s.branch", path); + sub = submodule_from_path(the_repository, null_oid(), path); + + if (!sub) + die(_("no submodule mapping found in .gitmodules for path '%s'"), + path); + + config_name = xstrfmt("submodule.%s.branch", sub->name); ret = config_set_in_gitmodules_file_gently(config_name, opt_branch); free(config_name);
The commands need a path to a submodule but treated it as the name when modifying the .gitmodules file, leading to confusion when a submodule's name does not match its path. Because calling submodule_from_path initializes the submodule cache, we need to manually trigger a reread before syncing, as the cache is missing the config change we just made. Signed-off-by: Jan Alexander Steffens (heftig) <heftig@archlinux.org> --- Notes: v2 changes: - fixed code style - replaced potentially unsafe use of `sub->path` with `path` builtin/submodule--helper.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-)