git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Glen Choo <chooglen@google.com>
To: git@vger.kernel.org
Cc: "Glen Choo" <chooglen@google.com>,
	"Junio C Hamano" <gitster@pobox.com>,
	"Atharva Raykar" <raykar.ath@gmail.com>,
	"Emily Shaffer" <emilyshaffer@google.com>,
	"Ævar Arnfjörð Bjarmason" <avarab@gmail.com>,
	"Josh Steadmon" <steadmon@google.com>
Subject: [PATCH v3 08/13] submodule--helper run-update-procedure: learn --remote
Date: Wed,  2 Mar 2022 16:57:22 -0800	[thread overview]
Message-ID: <20220303005727.69270-9-chooglen@google.com> (raw)
In-Reply-To: <20220303005727.69270-1-chooglen@google.com>

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>
---
 builtin/submodule--helper.c | 56 +++++++++++++++----------------------
 git-submodule.sh            | 30 +-------------------
 2 files changed, 23 insertions(+), 63 deletions(-)

diff --git a/builtin/submodule--helper.c b/builtin/submodule--helper.c
index 3a96c35b86..99341fb343 100644
--- a/builtin/submodule--helper.c
+++ b/builtin/submodule--helper.c
@@ -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;
@@ -3033,6 +3004,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);
 
@@ -3431,11 +3421,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},
diff --git a/git-submodule.sh b/git-submodule.sh
index 458ce73ac6..23ebd90892 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -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
 #
@@ -409,21 +395,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} \
@@ -434,6 +405,7 @@ cmd_update()
 			  ${update:+--update "$update"} \
 			  ${prefix:+--recursive-prefix "$prefix"} \
 			  ${sha1:+--oid "$sha1"} \
+			  ${remote:+--remote} \
 			  "--" \
 			  "$sm_path")
 
-- 
2.33.GIT


  parent reply	other threads:[~2022-03-03  0:58 UTC|newest]

Thread overview: 75+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-03-01  0:08 [PATCH 00/13] submodule: convert parts of 'update' to C Glen Choo
2022-03-01  0:08 ` [PATCH 01/13] submodule tests: test for init and update failure output Glen Choo
2022-03-01  0:08 ` [PATCH 02/13] submodule--helper: remove update-module-mode Glen Choo
2022-03-01  0:08 ` [PATCH 03/13] submodule--helper: reorganize code for sh to C conversion Glen Choo
2022-03-01  0:08 ` [PATCH 04/13] submodule--helper run-update-procedure: remove --suboid Glen Choo
2022-03-01  0:08 ` [PATCH 05/13] submodule--helper: remove ensure-core-worktree Glen Choo
2022-03-01  0:08 ` [PATCH 06/13] submodule--helper: get remote names from any repository Glen Choo
2022-03-01  2:46   ` Junio C Hamano
2022-03-01  4:26     ` Glen Choo
2022-03-01  0:08 ` [PATCH 07/13] submodule--helper: don't use bitfield indirection for parse_options() Glen Choo
2022-03-01  0:08 ` [PATCH 08/13] submodule--helper run-update-procedure: learn --remote Glen Choo
2022-03-01  0:08 ` [PATCH 09/13] submodule--helper: refactor get_submodule_displaypath() Glen Choo
2022-03-01  0:08 ` [PATCH 10/13] submodule--helper: allow setting superprefix for init_submodule() Glen Choo
2022-03-01  0:08 ` [PATCH 11/13] submodule--helper update-clone: learn --init Glen Choo
2022-03-01  0:08 ` [PATCH 12/13] submodule update: add tests for --filter Glen Choo
2022-03-01  0:08 ` [PATCH 13/13] submodule--helper update-clone: check for --filter and --init Glen Choo
2022-03-01  1:29 ` [PATCH 00/13] submodule: convert parts of 'update' to C Glen Choo
2022-03-01  4:41 ` [PATCH v2 " Glen Choo
2022-03-01  4:41   ` [PATCH v2 01/13] submodule tests: test for init and update failure output Glen Choo
2022-03-01  4:41   ` [PATCH v2 02/13] submodule--helper: remove update-module-mode Glen Choo
2022-03-01  4:41   ` [PATCH v2 03/13] submodule--helper: reorganize code for sh to C conversion Glen Choo
2022-03-01  4:41   ` [PATCH v2 04/13] submodule--helper run-update-procedure: remove --suboid Glen Choo
2022-03-01  4:41   ` [PATCH v2 05/13] submodule--helper: remove ensure-core-worktree Glen Choo
2022-03-01  4:41   ` [PATCH v2 06/13] submodule--helper: get remote names from any repository Glen Choo
2022-03-01  8:01     ` Ævar Arnfjörð Bjarmason
2022-03-01  4:41   ` [PATCH v2 07/13] submodule--helper: don't use bitfield indirection for parse_options() Glen Choo
2022-03-01  4:41   ` [PATCH v2 08/13] submodule--helper run-update-procedure: learn --remote Glen Choo
2022-03-01  4:41   ` [PATCH v2 09/13] submodule--helper: refactor get_submodule_displaypath() Glen Choo
2022-03-01  8:05     ` Ævar Arnfjörð Bjarmason
2022-03-01  4:41   ` [PATCH v2 10/13] submodule--helper: allow setting superprefix for init_submodule() Glen Choo
2022-03-01  4:41   ` [PATCH v2 11/13] submodule--helper update-clone: learn --init Glen Choo
2022-03-01  4:41   ` [PATCH v2 12/13] submodule update: add tests for --filter Glen Choo
2022-03-01  8:07     ` Ævar Arnfjörð Bjarmason
2022-03-01 18:30       ` Glen Choo
2022-03-01  4:41   ` [PATCH v2 13/13] submodule--helper update-clone: check for --filter and --init Glen Choo
2022-03-01  7:21     ` Ævar Arnfjörð Bjarmason
2022-03-01  7:34       ` Junio C Hamano
2022-03-01 18:34         ` Glen Choo
2022-03-03 10:06           ` Ævar Arnfjörð Bjarmason
2022-03-03  0:57   ` [PATCH v3 00/13] submodule: convert parts of 'update' to C Glen Choo
2022-03-03  0:57     ` [PATCH v3 01/13] submodule tests: test for init and update failure output Glen Choo
2022-03-03  0:57     ` [PATCH v3 02/13] submodule--helper: remove update-module-mode Glen Choo
2022-03-03  0:57     ` [PATCH v3 03/13] submodule--helper: reorganize code for sh to C conversion Glen Choo
2022-03-03  0:57     ` [PATCH v3 04/13] submodule--helper run-update-procedure: remove --suboid Glen Choo
2022-03-03 21:09       ` Junio C Hamano
2022-03-03  0:57     ` [PATCH v3 05/13] submodule--helper: remove ensure-core-worktree Glen Choo
2022-03-03 21:25       ` Junio C Hamano
2022-03-04 21:27         ` Glen Choo
2022-03-03  0:57     ` [PATCH v3 06/13] submodule--helper: get remote names from any repository Glen Choo
2022-03-03  0:57     ` [PATCH v3 07/13] submodule--helper: don't use bitfield indirection for parse_options() Glen Choo
2022-03-03  0:57     ` Glen Choo [this message]
2022-03-03 21:35       ` [PATCH v3 08/13] submodule--helper run-update-procedure: learn --remote Junio C Hamano
2022-03-04 21:29         ` Glen Choo
2022-03-03  0:57     ` [PATCH v3 09/13] submodule--helper: refactor get_submodule_displaypath() Glen Choo
2022-03-03  0:57     ` [PATCH v3 10/13] submodule--helper: allow setting superprefix for init_submodule() Glen Choo
2022-03-03  0:57     ` [PATCH v3 11/13] submodule--helper update-clone: learn --init Glen Choo
2022-03-03  0:57     ` [PATCH v3 12/13] submodule update: add tests for --filter Glen Choo
2022-03-03  0:57     ` [PATCH v3 13/13] submodule--helper update-clone: check for --filter and --init Glen Choo
2022-03-03  9:58     ` [PATCH v3 00/13] submodule: convert parts of 'update' to C Ævar Arnfjörð Bjarmason
2022-03-03 21:41       ` Junio C Hamano
2022-03-05  0:13     ` [PATCH v4 " Glen Choo
2022-03-05  0:13       ` [PATCH v4 01/13] submodule tests: test for init and update failure output Glen Choo
2022-03-05  0:13       ` [PATCH v4 02/13] submodule--helper: remove update-module-mode Glen Choo
2022-03-05  0:13       ` [PATCH v4 03/13] submodule--helper: reorganize code for sh to C conversion Glen Choo
2022-03-05  0:13       ` [PATCH v4 04/13] submodule--helper run-update-procedure: remove --suboid Glen Choo
2022-03-05  0:13       ` [PATCH v4 05/13] submodule--helper: get remote names from any repository Glen Choo
2022-03-05  0:13       ` [PATCH v4 06/13] submodule--helper: don't use bitfield indirection for parse_options() Glen Choo
2022-03-05  0:13       ` [PATCH v4 07/13] submodule--helper run-update-procedure: learn --remote Glen Choo
2022-03-05  0:13       ` [PATCH v4 08/13] submodule--helper: refactor get_submodule_displaypath() Glen Choo
2022-03-05  0:13       ` [PATCH v4 09/13] submodule--helper: allow setting superprefix for init_submodule() Glen Choo
2022-03-05  0:13       ` [PATCH v4 10/13] submodule--helper update-clone: learn --init Glen Choo
2022-03-05  0:13       ` [PATCH v4 11/13] submodule--helper: remove ensure-core-worktree Glen Choo
2022-03-05  0:14       ` [PATCH v4 12/13] submodule update: add tests for --filter Glen Choo
2022-03-05  0:14       ` [PATCH v4 13/13] submodule--helper update-clone: check for --filter and --init Glen Choo
2022-03-05  0:40       ` [PATCH v4 00/13] submodule: convert parts of 'update' to C Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20220303005727.69270-9-chooglen@google.com \
    --to=chooglen@google.com \
    --cc=avarab@gmail.com \
    --cc=emilyshaffer@google.com \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=raykar.ath@gmail.com \
    --cc=steadmon@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).