diff options
-rw-r--r-- | receive-pack.c | 3 | ||||
-rw-r--r-- | run-command.c | 32 | ||||
-rw-r--r-- | run-command.h | 2 |
3 files changed, 30 insertions, 7 deletions
diff --git a/receive-pack.c b/receive-pack.c index 2b0ba638af..48e49465ba 100644 --- a/receive-pack.c +++ b/receive-pack.c @@ -73,7 +73,8 @@ static int run_update_hook(const char *refname, if (access(update_hook, X_OK) < 0) return 0; - code = run_command(update_hook, refname, old_hex, new_hex, NULL); + code = run_command_opt(RUN_COMMAND_STDOUT_TO_STDERR, + update_hook, refname, old_hex, new_hex, NULL); switch (code) { case 0: return 0; diff --git a/run-command.c b/run-command.c index d0330c3793..7e4ca43c62 100644 --- a/run-command.c +++ b/run-command.c @@ -14,7 +14,8 @@ int run_command_v_opt(const char **argv, int flags) dup2(fd, 0); dup2(fd, 1); close(fd); - } + } else if (flags & RUN_COMMAND_STDOUT_TO_STDERR) + dup2(2, 1); if (flags & RUN_GIT_CMD) { execv_git_cmd(argv); } else { @@ -51,14 +52,12 @@ int run_command_v(const char **argv) return run_command_v_opt(argv, 0); } -int run_command(const char *cmd, ...) +static int run_command_va_opt(int opt, const char *cmd, va_list param) { int argc; const char *argv[MAX_RUN_COMMAND_ARGS]; const char *arg; - va_list param; - va_start(param, cmd); argv[0] = (char*) cmd; argc = 1; while (argc < MAX_RUN_COMMAND_ARGS) { @@ -66,8 +65,29 @@ int run_command(const char *cmd, ...) if (!arg) break; } - va_end(param); if (MAX_RUN_COMMAND_ARGS <= argc) return error("too many args to run %s", cmd); - return run_command_v_opt(argv, 0); + return run_command_v_opt(argv, opt); +} + +int run_command_opt(int opt, const char *cmd, ...) +{ + va_list params; + int r; + + va_start(params, cmd); + r = run_command_va_opt(opt, cmd, params); + va_end(params); + return r; +} + +int run_command(const char *cmd, ...) +{ + va_list params; + int r; + + va_start(params, cmd); + r = run_command_va_opt(0, cmd, params); + va_end(params); + return r; } diff --git a/run-command.h b/run-command.h index 82a0861f23..8156eac31b 100644 --- a/run-command.h +++ b/run-command.h @@ -13,8 +13,10 @@ enum { #define RUN_COMMAND_NO_STDIO 1 #define RUN_GIT_CMD 2 /*If this is to be git sub-command */ +#define RUN_COMMAND_STDOUT_TO_STDERR 4 int run_command_v_opt(const char **argv, int opt); int run_command_v(const char **argv); +int run_command_opt(int opt, const char *cmd, ...); int run_command(const char *cmd, ...); #endif |