Signed-off-by: Johannes Sixt <johannes.sixt@xxxxxxxxxx> --- fetch-pack.c | 35 ++++++++++------------------------- 1 files changed, 10 insertions(+), 25 deletions(-) diff --git a/fetch-pack.c b/fetch-pack.c index d06b5ec..80268e1 100644 --- a/fetch-pack.c +++ b/fetch-pack.c @@ -6,6 +6,7 @@ #include "exec_cmd.h" #include "pack.h" #include "sideband.h" +#include "run-command.h" static int keep_pack; static int transfer_unpack_limit = -1; @@ -502,9 +503,12 @@ static int get_pack(int xd[2]) char hdr_arg[256]; const char **av; int do_keep = keep_pack; + struct child_process cmd; side_pid = setup_sideband(fd, xd); + memset(&cmd, 0, sizeof(cmd)); + cmd.argv = argv; av = argv; *hdr_arg = 0; if (unpack_limit) { @@ -544,33 +548,14 @@ static int get_pack(int xd[2]) *av++ = hdr_arg; *av++ = NULL; - pid = fork(); - if (pid < 0) + cmd.in = fd[0]; + cmd.git_cmd = 1; + if (start_command(&cmd)) die("fetch-pack: unable to fork off %s", argv[0]); - if (!pid) { - dup2(fd[0], 0); - close(fd[0]); - close(fd[1]); - execv_git_cmd(argv); - die("%s exec failed", argv[0]); - } - close(fd[0]); close(fd[1]); - while (waitpid(pid, &status, 0) < 0) { - if (errno != EINTR) - die("waiting for %s: %s", argv[0], strerror(errno)); - } - if (WIFEXITED(status)) { - int code = WEXITSTATUS(status); - if (code) - die("%s died with error code %d", argv[0], code); - return 0; - } - if (WIFSIGNALED(status)) { - int sig = WTERMSIG(status); - die("%s died of signal %d", argv[0], sig); - } - die("%s died of unnatural causes %d", argv[0], status); + if (finish_command(&cmd)) + die("%s failed", argv[0]); + return 0; } static int fetch_pack(int fd[2], int nr_match, char **match) -- 1.5.3.3.1134.gee562 - 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