git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v4 9/9] builtin/fetch: check for submodule updates for non branch fetches

From
Stefan Beller <sbeller@google.com>
Date
Sep 25, 2018, 19:47 UTC
Message-ID
<20180925194755.105578-10-sbeller@google.com>
In-Reply-To
<20180925194755.105578-1-sbeller@google.com>

Gerrit, the code review tool, has a different workflow than our mailing list based approach. Usually users upload changes to a Gerrit server and continuous integration and testing happens by bots. Sometimes however a user wants to checkout a change locally and look at it locally. For this use case, Gerrit offers a command line snippet to copy and paste to your terminal, which looks like

  git fetch https://<host>/gerrit refs/changes/<id> &&
  git checkout FETCH_HEAD

For Gerrit changes that contain changing submodule gitlinks, it would be easy to extend both the fetch and checkout with the '--recurse-submodules' flag, such that this command line snippet would produce the state of a change locally.

However the functionality added in the previous patch, which would ensure that we fetch the objects in the submodule that the gitlink pointed at, only works for remote tracking branches so far, not for FETCH_HEAD.

Make sure that fetching a superproject to its FETCH_HEAD, also respects the existence checks for objects in the submodule recursion.

Signed-off-by: Stefan Beller <sbeller@google.com>
---
 builtin/fetch.c             | 5 ++++-
 t/t5526-fetch-submodules.sh | 2 +-
 2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/builtin/fetch.c b/builtin/fetch.c
index e3b03ad3bd3..f2d9e548bf0 100644
--- a/builtin/fetch.c
+++ b/builtin/fetch.c
@@ -894,11 +894,14 @@ static int store_updated_refs(const char *raw_url, const char *remote_name,
 				rc |= update_local_ref(ref, what, rm, &note,
 						       summary_width);
 				free(ref);
-			} else
+			} else {
+				check_for_new_submodule_commits(&rm->old_oid);
 				format_display(&note, '*',
 					       *kind ? kind : "branch", NULL,
 					       *what ? what : "HEAD",
 					       "FETCH_HEAD", summary_width);
+			}
+
 			if (note.len) {
 				if (verbosity >= 0 && !shown_url) {
 					fprintf(stderr, _("From %.*s\n"),
diff --git a/t/t5526-fetch-submodules.sh b/t/t5526-fetch-submodules.sh
index af12c50e7dd..a509eabb044 100755
--- a/t/t5526-fetch-submodules.sh
+++ b/t/t5526-fetch-submodules.sh
@@ -615,7 +615,7 @@ test_expect_success "fetch new commits on-demand when they are not reachable" '
 	git update-ref refs/changes/2 $D &&
 	(
 		cd downstream &&
-		git fetch --recurse-submodules --recurse-submodules-default on-demand origin refs/changes/2:refs/heads/my_branch &&
+		git fetch --recurse-submodules origin refs/changes/2 &&
 		git -C submodule cat-file -t $C &&
 		git checkout --recurse-submodules FETCH_HEAD
 	)
-- 
2.19.0.605.g01d371f741-goog
Previous: Stefan Beller
Message 14 of 14 in “fetch: make sure submodule oids are fetched”
  1. 0/9 fetch: make sure submodule oids are fetchedStefan Beller, Sep 25, 2018
  2. 1/9 sha1-array: provide oid_array_filterStefan Beller, Sep 25, 2018
  3. Junio C HamanoSep 26, 2018
  4. 2/9 submodule.c: fix indentationStefan Beller, Sep 25, 2018
  5. Junio C HamanoSep 26, 2018
  6. 3/9 submodule.c: sort changed_submodule_names before searching itStefan Beller, Sep 25, 2018
  7. Junio C HamanoSep 26, 2018
  8. 4/9 submodule: move global changed_submodule_names into fetch submodule structStefan Beller, Sep 25, 2018
  9. Junio C HamanoSep 26, 2018
  10. 5/9 submodule.c: do not copy around submodule listStefan Beller, Sep 25, 2018
  11. 6/9 repository: repo_submodule_init to take a submodule structStefan Beller, Sep 25, 2018
  12. 7/9 submodule: fetch in submodules git directory instead of in worktreeStefan Beller, Sep 25, 2018
  13. 8/9 fetch: retry fetching submodules if needed objects were not fetchedStefan Beller, Sep 25, 2018
  14. 9/9 builtin/fetch: check for submodule updates for non branch fetchesStefan Beller, Sep 25, 2018

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.