Change {pre,post}-receive hooks to use stdin
authorShawn O. Pearce <spearce@spearce.org>
Sat, 10 Mar 2007 08:28:16 +0000 (03:28 -0500)
committerJunio C Hamano <junkio@cox.net>
Mon, 12 Mar 2007 05:56:03 +0000 (22:56 -0700)
commitf43cd49fb82b0eee10b88833b58edd711fe8298d
tree80310d2aa2fc7480bc25c6223e186cf12385e6b6
parent1d9e8b56fe3a0360bf61ce633827af8fa9a7013c
Change {pre,post}-receive hooks to use stdin

Sergey Vlasov, Andy Parkins and Alex Riesen all pointed out that it
is possible for a single invocation of receive-pack to be given more
refs than the OS might allow us to pass as command line parameters
to a single hook invocation.

We don't want to break these up into multiple invocations (like
xargs might do) as that makes it impossible for the pre-receive
hook to verify multiple related ref updates occur at the same time,
and it makes it harder for post-receive to send out a single batch
notification.

Instead we pass the reference data on a pipe connected to the
hook's stdin, supplying one ref per line to the hook.  This way a
single hook invocation can obtain an infinite amount of ref data,
without bumping into any operating system limits.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Documentation/git-receive-pack.txt
receive-pack.c
t/t5401-update-hooks.sh