Merge branch 'jk/grep-double-dash'
authorJunio C Hamano <gitster@pobox.com>
Sat, 13 Feb 2010 23:09:33 +0000 (15:09 -0800)
committerJunio C Hamano <gitster@pobox.com>
Sat, 13 Feb 2010 23:09:33 +0000 (15:09 -0800)
* jk/grep-double-dash:
accept "git grep -- pattern"

builtin-grep.c
t/t7002-grep.sh
index 26d4deb1cce3e5540411a47fdf35085649669d06..63d4b95b0d8d1d0f3a3cc8acc50bab9cdf67deaa 100644 (file)
@@ -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,
index 7144f815c07a46e4f39a0f739fb964467fd27a16..0b583cbfc15ae09c030c0d4e82635f244ffc5293 100755 (executable)
@@ -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