magit/magit — pull request #1129 by tarsius (2013-12-29 20:30:47+00:00)
Title: Support multiple async processes and update process api

Support running multiple git (and other) processes in parallel. This was requested in #24, the oldest issue which was still open! Issue #827 can also be closed.

The output of all processes go into the same buffer, there is a section for each process, which behaves like sections in other Magit buffers, it can be collapsed expanded. By default sections start out collapsed unless the process buffer is already open. Old sections are automatically removed so the buffer does not grow indefinitely. Synchronous processes started by functions named `magit-git-...` do not use that buffer.

The api has updated to be better suited for how it is actually used. `magit-git*`, which did everything for everyone, no longer exists. There are now to primitives `magit-call-process` and `magit-start-process`. For each there is a git-wrapper: `magit-call-git` and `magit-start-git`. The former replaces `magit-run-git*`, there was no equivalent function for the latter. Most of the arguments `magit-run*` are missing from the new low-level api functions - they weren't actually ever used.

`magit-run-git`, `magit-run-git-async` and other `magit-run-git...` functions are mostly unchanged. However each member of the rest argument `ARGS` can now itself be a list of strings. In many places we previously had to use `apply`.

The api functions are now actually documented.