]> git.ipfire.org Git - thirdparty/git.git/commitdiff
submodule: port subcommand 'set-url' from shell to C
authorShourya Shukla <shouryashukla.oo@gmail.com>
Fri, 8 May 2020 06:21:36 +0000 (11:51 +0530)
committerJunio C Hamano <gitster@pobox.com>
Fri, 8 May 2020 16:17:55 +0000 (09:17 -0700)
Convert submodule subcommand 'set-url' to a builtin. Port 'set-url' to
'submodule--helper.c' and call the latter via 'git-submodule.sh'.

Signed-off-by: Shourya Shukla <shouryashukla.oo@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/submodule--helper.c
git-submodule.sh

index 1a4b391c882ad1bcdee8340d1594fe8a4bbc6af0..46c03d2a12671e15296b34d5e194fa837a12cdfb 100644 (file)
@@ -2246,6 +2246,37 @@ static int module_config(int argc, const char **argv, const char *prefix)
        usage_with_options(git_submodule_helper_usage, module_config_options);
 }
 
+static int module_set_url(int argc, const char **argv, const char *prefix)
+{
+       int quiet = 0;
+       const char *newurl;
+       const char *path;
+       char *config_name;
+
+       struct option options[] = {
+               OPT__QUIET(&quiet, N_("Suppress output for setting url of a submodule")),
+               OPT_END()
+       };
+       const char *const usage[] = {
+               N_("git submodule--helper set-url [--quiet] <path> <newurl>"),
+               NULL
+       };
+
+       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);
+
+       config_set_in_gitmodules_file_gently(config_name, newurl);
+       sync_submodule(path, prefix, quiet ? OPT_QUIET : 0);
+
+       free(config_name);
+
+       return 0;
+}
+
 #define SUPPORT_SUPER_PREFIX (1<<0)
 
 struct cmd_struct {
@@ -2276,6 +2307,7 @@ static struct cmd_struct commands[] = {
        {"is-active", is_active, 0},
        {"check-name", check_name, 0},
        {"config", module_config, 0},
+       {"set-url", module_set_url, 0},
 };
 
 int cmd_submodule__helper(int argc, const char **argv, const char *prefix)
index 08e0439df0a2cccf62274c9636e8eeb609827d2f..39ebdf25b5f7128dee92adda8311c83a3e605b4f 100755 (executable)
@@ -805,27 +805,7 @@ cmd_set_url() {
                shift
        done
 
-       if test $# -ne 2
-       then
-               usage
-       fi
-
-       # we can't use `git submodule--helper name` here because internally, it
-       # hashes the path so a trailing slash could lead to an unintentional no match
-       name="$(git submodule--helper list "$1" | cut -f2)"
-       if test -z "$name"
-       then
-               exit 1
-       fi
-
-       url="$2"
-       if test -z "$url"
-       then
-               exit 1
-       fi
-
-       git submodule--helper config submodule."$name".url "$url"
-       git submodule--helper sync ${GIT_QUIET:+--quiet} "$name"
+       git ${wt_prefix:+-C "$wt_prefix"} ${prefix:+--super-prefix "$prefix"} submodule--helper set-url ${GIT_QUIET:+--quiet} -- "$@"
 }
 
 #