]> git.ipfire.org Git - thirdparty/git.git/commit
hook API: fix v2.36.0 regression: hooks should be connected to a TTY
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Tue, 7 Jun 2022 08:48:20 +0000 (10:48 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 7 Jun 2022 18:13:20 +0000 (11:13 -0700)
commita082345372e14ecd30a84a790eda0c38154e4602
tree21f553fa1414f01336e8567165ccfac7e9781fe4
parentfd3aaf53f713d424d3c08cffa7e76e29b31638ba
hook API: fix v2.36.0 regression: hooks should be connected to a TTY

Fix a regression reported[1] against f443246b9f2 (commit: convert
{pre-commit,prepare-commit-msg} hook to hook.h, 2021-12-22): Due to
using the run_process_parallel() API in the earlier 96e7225b310 (hook:
add 'run' subcommand, 2021-12-22) we'd capture the hook's stderr and
stdout, and thus lose the connection to the TTY in the case of
e.g. the "pre-commit" hook.

As a preceding commit notes GNU parallel's similar --ungroup option
also has it emit output faster. While we're unlikely to have hooks
that emit truly massive amounts of output (or where the performance
thereof matters) it's still informative to measure the overhead. In a
similar "seq" test we're now ~30% faster:

$ cat .git/hooks/seq-hook; git hyperfine -L rev origin/master,HEAD~0 -s 'make CFLAGS=-O3' './git hook run seq-hook'
#!/bin/sh

seq 100000000
Benchmark 1: ./git hook run seq-hook' in 'origin/master
  Time (mean ± σ):     787.1 ms ±  13.6 ms    [User: 701.6 ms, System: 534.4 ms]
  Range (min … max):   773.2 ms … 806.3 ms    10 runs

Benchmark 2: ./git hook run seq-hook' in 'HEAD~0
  Time (mean ± σ):     603.4 ms ±   1.6 ms    [User: 573.1 ms, System: 30.3 ms]
  Range (min … max):   601.0 ms … 606.2 ms    10 runs

Summary
  './git hook run seq-hook' in 'HEAD~0' ran
    1.30 ± 0.02 times faster than './git hook run seq-hook' in 'origin/master'

1. https://lore.kernel.org/git/CA+dzEBn108QoMA28f0nC8K21XT+Afua0V2Qv8XkR8rAeqUCCZw@mail.gmail.com/

Reported-by: Anthony Sottile <asottile@umich.edu>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
[jc: minor fix-up to tests for consistency]
Signed-off-by: Junio C Hamano <gitster@pobox.com>
hook.c
t/t1800-hook.sh