]> git.ipfire.org Git - thirdparty/git.git/commitdiff
submodule--helper run-update-procedure: learn --remote
authorGlen Choo <chooglen@google.com>
Sat, 5 Mar 2022 00:13:55 +0000 (16:13 -0800)
committerJunio C Hamano <gitster@pobox.com>
Sat, 5 Mar 2022 00:39:12 +0000 (16:39 -0800)
Teach run-update-procedure to handle --remote instead of parsing
--remote in git-submodule.sh. As a result, "git submodule--helper
[print-default-remote|remote-branch]" have no more callers, so remove
them.

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

index 3832dccae57bfb9a5ab71a57dd54281a89668f2c..f673f7ebbfcf1bff92f1771a8f78530fb431f71b 100644 (file)
@@ -72,21 +72,6 @@ static char *get_default_remote(void)
        return repo_get_default_remote(the_repository);
 }
 
-static int print_default_remote(int argc, const char **argv, const char *prefix)
-{
-       char *remote;
-
-       if (argc != 1)
-               die(_("submodule--helper print-default-remote takes no arguments"));
-
-       remote = get_default_remote();
-       if (remote)
-               printf("%s\n", remote);
-
-       free(remote);
-       return 0;
-}
-
 static int starts_with_dot_slash(const char *str)
 {
        return str[0] == '.' && is_dir_sep(str[1]);
@@ -2027,6 +2012,7 @@ struct update_data {
        unsigned int quiet;
        unsigned int nofetch;
        unsigned int just_cloned;
+       unsigned int remote;
 };
 #define UPDATE_DATA_INIT { .update_strategy = SUBMODULE_UPDATE_STRATEGY_INIT }
 
@@ -2603,6 +2589,8 @@ static int run_update_procedure(int argc, const char **argv, const char *prefix)
                OPT_CALLBACK_F(0, "oid", &update_data.oid, N_("sha1"),
                               N_("SHA1 expected by superproject"), PARSE_OPT_NONEG,
                               parse_opt_object_id),
+               OPT_BOOL(0, "remote", &update_data.remote,
+                        N_("use SHA-1 of submodule's remote tracking branch")),
                OPT_END()
        };
 
@@ -2682,23 +2670,6 @@ static const char *remote_submodule_branch(const char *path)
        return branch;
 }
 
-static int resolve_remote_submodule_branch(int argc, const char **argv,
-               const char *prefix)
-{
-       const char *ret;
-       struct strbuf sb = STRBUF_INIT;
-       if (argc != 2)
-               die("submodule--helper remote-branch takes exactly one arguments, got %d", argc);
-
-       ret = remote_submodule_branch(argv[1]);
-       if (!ret)
-               die("submodule %s doesn't exist", argv[1]);
-
-       printf("%s", ret);
-       strbuf_release(&sb);
-       return 0;
-}
-
 static int push_check(int argc, const char **argv, const char *prefix)
 {
        struct remote *remote;
@@ -3040,6 +3011,25 @@ static int update_submodule2(struct update_data *update_data)
                die(_("Unable to find current revision in submodule path '%s'"),
                        update_data->displaypath);
 
+       if (update_data->remote) {
+               char *remote_name = get_default_remote_submodule(update_data->sm_path);
+               const char *branch = remote_submodule_branch(update_data->sm_path);
+               char *remote_ref = xstrfmt("refs/remotes/%s/%s", remote_name, branch);
+
+               if (!update_data->nofetch) {
+                       if (fetch_in_submodule(update_data->sm_path, update_data->depth,
+                                             0, NULL))
+                               die(_("Unable to fetch in submodule path '%s'"),
+                                   update_data->sm_path);
+               }
+
+               if (resolve_gitlink_ref(update_data->sm_path, remote_ref, &update_data->oid))
+                       die(_("Unable to find %s revision in submodule path '%s'"),
+                           remote_ref, update_data->sm_path);
+
+               free(remote_ref);
+       }
+
        if (!oideq(&update_data->oid, &update_data->suboid) || update_data->force)
                return do_run_update_procedure(update_data);
 
@@ -3439,11 +3429,9 @@ static struct cmd_struct commands[] = {
        {"foreach", module_foreach, SUPPORT_SUPER_PREFIX},
        {"init", module_init, SUPPORT_SUPER_PREFIX},
        {"status", module_status, SUPPORT_SUPER_PREFIX},
-       {"print-default-remote", print_default_remote, 0},
        {"sync", module_sync, SUPPORT_SUPER_PREFIX},
        {"deinit", module_deinit, 0},
        {"summary", module_summary, SUPPORT_SUPER_PREFIX},
-       {"remote-branch", resolve_remote_submodule_branch, 0},
        {"push-check", push_check, 0},
        {"absorb-git-dirs", absorb_git_dirs, SUPPORT_SUPER_PREFIX},
        {"is-active", is_active, 0},
index 32a09302abe30033aed6e6d4160472374b68967b..882bf097d53d833ea2964a1a35dafacf7c94aa5d 100755 (executable)
@@ -247,20 +247,6 @@ cmd_deinit()
        git ${wt_prefix:+-C "$wt_prefix"} submodule--helper deinit ${GIT_QUIET:+--quiet} ${force:+--force} ${deinit_all:+--all} -- "$@"
 }
 
-# usage: fetch_in_submodule <module_path> [<depth>] [<sha1>]
-# Because arguments are positional, use an empty string to omit <depth>
-# but include <sha1>.
-fetch_in_submodule () (
-       sanitize_submodule_env &&
-       cd "$1" &&
-       if test $# -eq 3
-       then
-               echo "$3" | git fetch ${GIT_QUIET:+--quiet} --stdin ${2:+"$2"}
-       else
-               git fetch ${GIT_QUIET:+--quiet} ${2:+"$2"}
-       fi
-)
-
 #
 # Update each submodule path to correct revision, using clone and checkout as needed
 #
@@ -411,21 +397,6 @@ cmd_update()
                        just_cloned=
                fi
 
-               if test -n "$remote"
-               then
-                       branch=$(git submodule--helper remote-branch "$sm_path")
-                       if test -z "$nofetch"
-                       then
-                               # Fetch remote before determining tracking $sha1
-                               fetch_in_submodule "$sm_path" $depth ||
-                               die "fatal: $(eval_gettext "Unable to fetch in submodule path '\$sm_path'")"
-                       fi
-                       remote_name=$(sanitize_submodule_env; cd "$sm_path" && git submodule--helper print-default-remote)
-                       sha1=$(sanitize_submodule_env; cd "$sm_path" &&
-                               git rev-parse --verify "${remote_name}/${branch}") ||
-                       die "fatal: $(eval_gettext "Unable to find current \${remote_name}/\${branch} revision in submodule path '\$sm_path'")"
-               fi
-
                out=$(git submodule--helper run-update-procedure \
                          ${wt_prefix:+--prefix "$wt_prefix"} \
                          ${GIT_QUIET:+--quiet} \
@@ -436,6 +407,7 @@ cmd_update()
                          ${update:+--update "$update"} \
                          ${prefix:+--recursive-prefix "$prefix"} \
                          ${sha1:+--oid "$sha1"} \
+                         ${remote:+--remote} \
                          "--" \
                          "$sm_path")