path: root/builtin/commit.c
diff options
authorClemens Buchacher <>2015-11-16 08:05:58 (GMT)
committerJeff King <>2015-11-16 13:59:19 (GMT)
commitaf65f68cdf7540764583956e5819d85c5f6c74d1 (patch)
treed24339ac5e49e4236682967e331da5cf9ba3f766 /builtin/commit.c
parentaf40944bda352190f05d22b7cb8fe88beb17f3a7 (diff)
allow hooks to ignore their standard input stream
Since ec7dbd145 (receive-pack: allow hooks to ignore its standard input stream) the pre-receive and post-receive hooks ignore SIGPIPE. Do the same for the remaining hooks pre-push and post-rewrite, which read from standard input. The same arguments for ignoring SIGPIPE apply. Include test by Jeff King which checks that SIGPIPE does not cause pre-push hook failure. With the use of git update-ref --stdin it is fast enough to be enabled by default. Signed-off-by: Clemens Buchacher <> Signed-off-by: Jeff King <>
Diffstat (limited to 'builtin/commit.c')
1 files changed, 3 insertions, 0 deletions
diff --git a/builtin/commit.c b/builtin/commit.c
index dca09e2..f2a8b78 100644
--- a/builtin/commit.c
+++ b/builtin/commit.c
@@ -32,6 +32,7 @@
#include "sequencer.h"
#include "notes-utils.h"
#include "mailmap.h"
+#include "sigchain.h"
static const char * const builtin_commit_usage[] = {
N_("git commit [<options>] [--] <pathspec>..."),
@@ -1537,8 +1538,10 @@ static int run_rewrite_hook(const unsigned char *oldsha1,
return code;
n = snprintf(buf, sizeof(buf), "%s %s\n",
sha1_to_hex(oldsha1), sha1_to_hex(newsha1));
+ sigchain_push(SIGPIPE, SIG_IGN);
write_in_full(, buf, n);
+ sigchain_pop(SIGPIPE);
return finish_command(&proc);