It seems like the feedback for v1 was fairly positive, so I managed to find some time to go ahead finish it. The result is a much cleaner patch set. I think this could be merged in its current state, but there are a few outstanding concerns I have: * fetch.jobs isn't documented because I couldn't find any documentation for submodule.fetchjobs so I didn't know where to start writing. * I took the complicated approach and added --submodule-fetch-jobs and --fetch-jobs before converting --jobs over to set both. At the time I thought it wouldn't add too much extra complexity. I wasn't looking closely enough and ended up with a custom parsing function which is a bit ugly. I'm happy to fix either of these, but I wanted to send out the v2 before going any farther because I wasn't sure if --jobs would be converted over right away or if there was going to be a deprecation period. I've written the patch set such that the final patch can easily be dropped to avoid changing existing behavior. I'm also happy to re-spin this to just make --jobs control remotes and drop the --fetch-jobs and --submodule-fetch-jobs arguments, which would make the patch set somewhat simpler but preclude a deprecation period. Changes since v1 <email@example.com>: * fetch_multiple() has been rewritten to use run_processes_parallel_tr2() rather than manage children on its own. * The --fetch-jobs argument has been added. * The --jobs arugemnt has been used, instead of the --parallel argument.