Builtin commands have skipped repo setup when called with just a single
option -h and thus shown their short help text even outside of
repositories since 99caeed05d3 (Let 'git <command> -h' show usage
without a git dir).

Add the flag NO_INTERNAL_HELP for builtins to opt out of this special
treatment and provide a list of commands that are exempt from the
corresponding test in t0012.  That allows builtins to handle -h
themselves.

Signed-off-by: Rene Scharfe <l....@web.de>
---
 git.c           | 6 +++++-
 t/t0012-help.sh | 9 ++++++++-
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/git.c b/git.c
index 9e96dd4090..9d1b8c4716 100644
--- a/git.c
+++ b/git.c
@@ -298,6 +298,7 @@ static int handle_alias(int *argcp, const char ***argv)
 #define NEED_WORK_TREE         (1<<3)
 #define SUPPORT_SUPER_PREFIX   (1<<4)
 #define DELAY_PAGER_CONFIG     (1<<5)
+#define NO_INTERNAL_HELP       (1<<6)
 
 struct cmd_struct {
        const char *cmd;
@@ -312,7 +313,10 @@ static int run_builtin(struct cmd_struct *p, int argc, 
const char **argv)
        const char *prefix;
 
        prefix = NULL;
-       help = argc == 2 && !strcmp(argv[1], "-h");
+       if (p->option & NO_INTERNAL_HELP)
+               help = 0;
+       else
+               help = argc == 2 && !strcmp(argv[1], "-h");
        if (!help) {
                if (p->option & RUN_SETUP)
                        prefix = setup_git_directory();
diff --git a/t/t0012-help.sh b/t/t0012-help.sh
index 487b92a5de..74eeead168 100755
--- a/t/t0012-help.sh
+++ b/t/t0012-help.sh
@@ -53,12 +53,19 @@ test_expect_success 'generate builtin list' '
        git --list-builtins >builtins
 '
 
+cat >no_internal_help <<EOF
+EOF
+
+test_expect_success 'generate list of builtins with internal help' '
+       grep -w -v -f no_internal_help <builtins >builtins_internal_help
+'
+
 while read builtin
 do
        test_expect_success "$builtin can handle -h" '
                test_expect_code 129 git $builtin -h >output 2>&1 &&
                test_i18ngrep usage output
        '
-done <builtins
+done <builtins_internal_help
 
 test_done
-- 
2.14.2

Reply via email to