[PATCH 3/3] grep: pass PARSE_OPT_NO_INTERNAL_HELP, fix odd -h handling
From: Ævar Arnfjörð Bjarmason <hidden>
Date: 2021-09-24 16:51:56
Subsystem:
the rest · Maintainer:
Linus Torvalds
The "grep" command supports both "-h" and "-H" options, along with a
mandatory pattern, but this has been partially usurped by the "-h"
handling in parse_options().
The reason it's just been "odd" instead of a bug is that we'll only
print out "-h" usage with parse_options() if there's no further
non-option arguments, so instead of printing this brief blurb on a
stand-alone -h we'd print out the full usage:
$ git grep -H
fatal: no pattern given
But for the aforementioned reason a "git grep -h <pattern>" would
work, we wouldn't take the !PARSE_OPT_NO_INTERNAL_HELP branch in
parse_options_step(), would handle our own custom 'h' option, and
builtin/grep.c itself would know what to do at that point.
Reported-by: Ignacy Gawedzki <redacted>
Signed-off-by: Ævar Arnfjörð Bjarmason <redacted>
---
builtin/grep.c | 3 ++-
t/t0012-help.sh | 4 +++-
t/t7810-grep.sh | 4 ++++
3 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/builtin/grep.c b/builtin/grep.c
index 51278b01fa2..a2d6704aa41 100644
--- a/builtin/grep.c
+++ b/builtin/grep.c@@ -981,7 +981,8 @@ int cmd_grep(int argc, const char **argv, const char *prefix) */ argc = parse_options(argc, argv, prefix, options, grep_usage, PARSE_OPT_KEEP_DASHDASH | - PARSE_OPT_STOP_AT_NON_OPTION); + PARSE_OPT_STOP_AT_NON_OPTION | + PARSE_OPT_NO_INTERNAL_HELP); grep_commit_pattern_type(pattern_type_arg, &opt); if (use_index && !startup_info->have_repository) {
diff --git a/t/t0012-help.sh b/t/t0012-help.sh
index 913f34c8e9d..0b623fe794a 100755
--- a/t/t0012-help.sh
+++ b/t/t0012-help.sh@@ -90,7 +90,9 @@ test_expect_success 'git help succeeds without git.html' ' ' test_expect_success 'generate builtin list' ' - git --list-cmds=builtins >builtins + git --list-cmds=builtins >builtins && + grep -v "^grep$" builtins >builtins+ && + mv builtins+ builtins ' while read builtin
diff --git a/t/t7810-grep.sh b/t/t7810-grep.sh
index 6b6423a07c3..4c2777120b0 100755
--- a/t/t7810-grep.sh
+++ b/t/t7810-grep.sh@@ -11,6 +11,10 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME . ./test-lib.sh +test_expect_success 'usage' ' + test_expect_code 128 git grep -h +' + test_invalid_grep_expression() { params="$@" && test_expect_success "invalid expression: grep $params" '
--
2.33.0.1285.g7aff81f6560