Skip to content
  • Junio C Hamano's avatar
    receive-pack: allow hooks to ignore its standard input stream · ec7dbd14
    Junio C Hamano authored
    
    
    The pre-receive and post-receive hooks were designed to be an
    improvement over old style update and post-update hooks, which take
    the update information on their command line and are limited by the
    command line length limit.  The same information is fed from the
    standard input to pre/post-receive hooks instead to lift this
    limitation.  It has been mandatory for these new style hooks to
    consume the update information fully from the standard input stream.
    Otherwise, they would risk killing the receive-pack process via
    SIGPIPE.
    
    If a hook does not want to look at all the information, it is easy
    to send its standard input to /dev/null (perhaps a niche use of hook
    might need to know only the fact that a push was made, without
    having to know what objects have been pushed to update which refs),
    and this has already been done by existing hooks that are written
    carefully.
    
    However, because there is no good way to consistently fail hooks
    that do not consume the input fully (a small push may result in a
    short update record that may fit within the pipe buffer, to which
    the receive-pack process may manage to write before the hook has a
    chance to exit without reading anything, which will not result in a
    death-by-SIGPIPE of receive-pack), it can lead to a hard to diagnose
    "once in a blue moon" phantom failure.
    
    Lift this "hooks must consume their input fully" mandate.  A mandate
    that is not enforced strictly is not helping us to catch mistakes in
    hooks.  If a hook has a good reason to decide the outcome of its
    operation without reading the information we feed it, let it do so
    as it pleases.
    
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    ec7dbd14