aboutsummaryrefslogtreecommitdiff
path: root/submodule.c
diff options
context:
space:
mode:
Diffstat (limited to 'submodule.c')
-rw-r--r--submodule.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/submodule.c b/submodule.c
index 40a5c6fb9d..6599657f34 100644
--- a/submodule.c
+++ b/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);