mirror of
https://github.com/git/git
synced 2024-08-27 19:49:21 +00:00
accept "git grep -- pattern"
Currently the only way to "quote" a grep pattern that might begin with a dash is to use "git grep -e pattern". This works just fine, and is also the way right way to do it on many traditional grep implemenations. Some people prefer to use "git grep -- pattern", however, as "--" is the usual "end of options" marker, and at least GNU grep and Solaris 10 grep support this. This patch makes that syntax work. There is a slight behavior change, in that "git grep -- $X" used to be interpreted as "grep for -- in $X". However, that usage is questionable. "--" is usually the end-of-options marker, so "git grep" was unlike many other greps in treating it as a literal pattern (e.g., both GNU grep and Solaris 10 grep will treat "grep --" as missing a pattern). Signed-off-by: Jeff King <peff@peff.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
3c8f6c8c4f
commit
1123c67cee
|
@ -861,6 +861,16 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
|
|||
PARSE_OPT_STOP_AT_NON_OPTION |
|
||||
PARSE_OPT_NO_INTERNAL_HELP);
|
||||
|
||||
/*
|
||||
* skip a -- separator; we know it cannot be
|
||||
* separating revisions from pathnames if
|
||||
* we haven't even had any patterns yet
|
||||
*/
|
||||
if (argc > 0 && !opt.pattern_list && !strcmp(argv[0], "--")) {
|
||||
argv++;
|
||||
argc--;
|
||||
}
|
||||
|
||||
/* First unrecognized non-option token */
|
||||
if (argc > 0 && !opt.pattern_list) {
|
||||
append_grep_pattern(&opt, argv[0], "command line", 0,
|
||||
|
|
|
@ -434,4 +434,37 @@ test_expect_success 'grep -Fi' '
|
|||
test_cmp expected actual
|
||||
'
|
||||
|
||||
test_expect_success 'setup double-dash tests' '
|
||||
cat >double-dash <<EOF &&
|
||||
--
|
||||
->
|
||||
other
|
||||
EOF
|
||||
git add double-dash
|
||||
'
|
||||
|
||||
cat >expected <<EOF
|
||||
double-dash:->
|
||||
EOF
|
||||
test_expect_success 'grep -- pattern' '
|
||||
git grep -- "->" >actual &&
|
||||
test_cmp expected actual
|
||||
'
|
||||
test_expect_success 'grep -- pattern -- pathspec' '
|
||||
git grep -- "->" -- double-dash >actual &&
|
||||
test_cmp expected actual
|
||||
'
|
||||
test_expect_success 'grep -e pattern -- path' '
|
||||
git grep -e "->" -- double-dash >actual &&
|
||||
test_cmp expected actual
|
||||
'
|
||||
|
||||
cat >expected <<EOF
|
||||
double-dash:--
|
||||
EOF
|
||||
test_expect_success 'grep -e -- -- path' '
|
||||
git grep -e -- -- double-dash >actual &&
|
||||
test_cmp expected actual
|
||||
'
|
||||
|
||||
test_done
|
||||
|
|
Loading…
Reference in a new issue