Subject: [PATCH] hooks: allow input from stdin

From: "Orgad Shaneh via GitGitGadget" <[email-masked]>
Date: Tue, 17 Nov 2020 15:02:43 +0000

From: Orgad Shaneh <[email-masked]>

Let hooks receive user input if applicable.

Closing stdin originates in f5bbc3225 (Port git commit to C,
2007). Looks like the original shell implementation did have
stdin open. Not clear why the author chose to close it on
the C port (maybe copy&paste).

The only hook that passes internal information to the hook
via stdin is pre-push, which has its own logic.

Some references of users requesting this feature. Some of
them use acrobatics to gain access to stdin:
[1] https://stackoverflow.com/q/1067874/764870
[2] https://stackoverflow.com/q/47477766/764870
[3] https://stackoverflow.com/q/3417896/764870
[4] https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues/3165
[5] https://github.com/typicode/husky/issues/442

Signed-off-by: Orgad Shaneh <[email-masked]>
---
    hooks: allow input from stdin
    
    Let hooks receive user input if applicable.
    
    Closing stdin originates in f5bbc3225 (Port git commit to C, 2007).
    Looks like the original shell implementation did have stdin open. Not
    clear why the author chose to close it on the C port (maybe copy&paste).
    
    The only hook that passes internal information to the hook via stdin is
    pre-push, which has its own logic.
    
    Some references of users requesting this feature. Some of them use
    acrobatics to gain access to stdin: [1] 
    https://stackoverflow.com/q/1067874/764870[2] 
    https://stackoverflow.com/q/47477766/764870[3] 
    https://stackoverflow.com/q/3417896/764870[4] 
    https://github.com/FriendsOfPHP/PHP-CS-Fixer/issues/3165[5] 
    https://github.com/typicode/husky/issues/442

Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-790%2Forgads%2Fhooks-stdin-v1
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-790/orgads/hooks-stdin-v1
Pull-Request: https://github.com/gitgitgadget/git/pull/790

 run-command.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/run-command.c b/run-command.c
index 2ee59acdc8..a17b613216 100644
--- a/run-command.c
+++ b/run-command.c
@@ -1356,7 +1356,6 @@ int run_hook_ve(const char *const *env, const char *name, va_list args)
 	while ((p = va_arg(args, const char *)))
 		strvec_push(&hook.args, p);
 	hook.env = env;
-	hook.no_stdin = 1;
 	hook.stdout_to_stderr = 1;
 	hook.trace2_hook_name = name;

base-commit: e31aba42fb12bdeb0f850829e008e1e3f43af500
-- 
gitgitgadget