Here is a series of patches that removes a number fork/exec pairs. They are replaced by delegating to start_command/finish_command/run_command. I've addressed all issues that were raised. However, concerning whether git_connect() shoud return NULL or not, I decided to stay with my earlier approach to return NULL for non-forking connections. Consequently, I had to remove all error checks because there is now no unique value that can indicate failure. The motivation is that the alternate approach (to always return non-NULL for any successful connection and NULL for failure) would benefit *only* libification; but *if* that ever happens, a major audit (and possibly) rewrite in the callers has to be done anyway because currently we are juggling, leaking, and double-closing file descriptors like mad - in error paths and normal paths. Patch 2 depends on Patch 1; otherwise, there are no dependencies. The series goes on top of 'master'. Note that 'next' has an additional call of git_connect() in the new transport.c. builtin-archive.c | 8 +-- cache.h | 4 +- connect.c | 128 +++++++++++++++++++++++++--------------------------- convert.c | 30 +++---------- diff.c | 38 +-------------- fetch-pack.c | 43 +++++------------ peek-remote.c | 8 +-- send-pack.c | 8 +-- 8 files changed, 96 insertions(+), 171 deletions(-) -- Hannes - 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