"Johannes Schindelin via GitGitGadget" <gitgitgadget@xxxxxxxxx> writes: > @@ -55,8 +58,14 @@ int cmd_for_each_repo(int argc, const char **argv, const char *prefix) > else if (err) > return 0; > > - for (i = 0; !result && i < values->nr; i++) > - result = run_command_on_repo(values->items[i].string, argc, argv); > + for (i = 0; i < values->nr; i++) { > + int ret = run_command_on_repo(values->items[i].string, argc, argv); > + if (ret) { > + if (!keep_going) > + return ret; > + result = 1; > + } > + } > > return result; > } Hmph, as I wish that more experienced folks to give a good structure to the codebase from get-go so that future developers who may be less experienced would avoid mistakes, with my maintainer's hat on, I would have expected something more like: for (i = 0; i < values->nr; i++) { int ret = run_command_on_repo(...); if (!ret) continue; if (keep_going) { result = 1; } else { result = ret; break; } } That way, clean-up actions, when they need to be added, can go before the single "return result" without structural changes, future-proofing the shape of the control flow. The loop is simple enough that it is acceptable to leave as the responsibility of future developers who wants to do something that require resource allocation and release before returning, of course ;-).