mirror of
https://github.com/git-for-windows/git.git
synced 2026-05-04 19:16:21 -05:00
submodule: fetch missing objects from default remote
When be76c21282 (fetch: ensure submodule objects fetched, 2018-12-06)
added support for fetching a missing submodule object by id, it
hardcoded the remote name as "origin" and deferred anything more
complicated for a later patch. Implement the NEEDSWORK item to remove
the hardcoded assumption by adding and using a submodule helper subcmd
'get-default-remote'. Fixing this lets 'git fetch --recurse-submodules'
succeed when the fetched commit(s) in the superproject trigger a
submodule fetch, and that submodule's default remote name is not
"origin".
Add non-"origin" remote tests to t5526-fetch-submodules.sh and
t5572-pull-submodule.sh demonstrating this works as expected and add
dedicated tests for get-default-remote.
Signed-off-by: Nasser Grainawi <nasser.grainawi@oss.qualcomm.com>
Reviewed-by: Jacob Keller <jacob.keller@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
1faf5b085a
commit
3b5fb32da8
17
submodule.c
17
submodule.c
@@ -1706,6 +1706,8 @@ static int get_next_submodule(struct child_process *cp, struct strbuf *err,
|
||||
if (spf->oid_fetch_tasks_nr) {
|
||||
struct fetch_task *task =
|
||||
spf->oid_fetch_tasks[spf->oid_fetch_tasks_nr - 1];
|
||||
struct child_process cp_remote = CHILD_PROCESS_INIT;
|
||||
struct strbuf remote_name = STRBUF_INIT;
|
||||
spf->oid_fetch_tasks_nr--;
|
||||
|
||||
child_process_init(cp);
|
||||
@@ -1719,8 +1721,19 @@ static int get_next_submodule(struct child_process *cp, struct strbuf *err,
|
||||
strvec_pushf(&cp->args, "--submodule-prefix=%s%s/",
|
||||
spf->prefix, task->sub->path);
|
||||
|
||||
/* NEEDSWORK: have get_default_remote from submodule--helper */
|
||||
strvec_push(&cp->args, "origin");
|
||||
cp_remote.git_cmd = 1;
|
||||
strvec_pushl(&cp_remote.args, "submodule--helper",
|
||||
"get-default-remote", task->sub->path, NULL);
|
||||
|
||||
if (!capture_command(&cp_remote, &remote_name, 0)) {
|
||||
strbuf_trim_trailing_newline(&remote_name);
|
||||
strvec_push(&cp->args, remote_name.buf);
|
||||
} else {
|
||||
/* Fallback to "origin" if the helper fails */
|
||||
strvec_push(&cp->args, "origin");
|
||||
}
|
||||
strbuf_release(&remote_name);
|
||||
|
||||
oid_array_for_each_unique(task->commits,
|
||||
append_oid_to_argv, &cp->args);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user