Heiko Voigt <hvoigt@xxxxxxxxxx> writes: > diff --git a/submodule.c b/submodule.c > index 3c714c2..ff0cfd8 100644 > --- a/submodule.c > +++ b/submodule.c > @@ -411,6 +411,54 @@ int check_submodule_needs_pushing(unsigned char new_sha1[20], > return needs_pushing->nr; > } > > +static int push_submodule(const char *path) > +{ > + if (add_submodule_odb(path)) > + return 1; > + > + if (for_each_remote_ref_submodule(path, has_remote, NULL) > 0) { > + struct child_process cp; > + const char *argv[] = {"push", NULL}; > + > + memset(&cp, 0, sizeof(cp)); > + cp.argv = argv; > + cp.env = local_repo_env; > + cp.git_cmd = 1; > + cp.no_stdin = 1; > + cp.dir = path; > + if (run_command(&cp)) > + return 0; > + close(cp.out); > + } > + > + return 1; > +} Hmm, this makes me wonder if we fire subprocesses and have them run in parallel (to a reasonably limited parallelism), it might make the overall user experience more pleasant, and if we did the same on the fetching side, it would be even nicer. We would need to keep track of children and after firing a handful of them we would need to start waiting for some to finish and collect their exit status before firing more, and at the end we would need to wait for the remaining ones and find how each one of them did before returning from push_unpushed_submodules(). If we were to do so, what are the missing support we would need from the run_command() subsystem? > +int push_unpushed_submodules(unsigned char new_sha1[20], const char *remotes_name) > +{ > + int i, ret = 1; > + struct string_list needs_pushing; > + > + memset(&needs_pushing, 0, sizeof(struct string_list)); > + needs_pushing.strdup_strings = 1; > + > + if (!check_submodule_needs_pushing(new_sha1, remotes_name, &needs_pushing)) > + return 1; > + > + for (i = 0; i < needs_pushing.nr; i++) { > + const char *path = needs_pushing.items[i].string; > + fprintf(stderr, "Pushing submodule '%s'\n", path); > + if (!push_submodule(path)) { > + fprintf(stderr, "Unable to push submodule '%s'\n", path); > + ret = 0; > + } > + } -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html