static int update_clone_get_next_task(struct child_process *child, struct strbuf *err, void *suc_cb, void **idx_task_cb) { struct submodule_update_clone *suc = suc_cb; const struct cache_entry *ce; int index; for (; suc->current < suc->list.nr; suc->current++) { ce = suc->list.entries[suc->current]; if (prepare_to_clone_next_submodule(ce, child, suc, err)) { int *p = xmalloc(sizeof(*p)); *p = suc->current; *idx_task_cb = p; suc->current++; return 1; } } /* * The loop above tried cloning each submodule once, now try the * stragglers again, which we can imagine as an extension of the * entry list. */ index = suc->current - suc->list.nr; if (index < suc->failed_clones_nr) { int *p; ce = suc->failed_clones[index]; if (!prepare_to_clone_next_submodule(ce, child, suc, err)) { suc->current ++; strbuf_addstr(err, "BUG: submodule considered for " "cloning, doesn't need cloning " "any more?\n"); return 0; } p = xmalloc(sizeof(*p)); *p = suc->current; *idx_task_cb = p; suc->current ++; return 1; } return 0; }
static int update_clone_get_next_task(struct child_process *child, struct strbuf *err, void *suc_cb, void **void_task_cb) { struct submodule_update_clone *suc = suc_cb; for (; suc->current < suc->list.nr; suc->current++) { const struct cache_entry *ce = suc->list.entries[suc->current]; if (prepare_to_clone_next_submodule(ce, child, suc, err)) { suc->current++; return 1; } } return 0; }