aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2010-02-17 14:55:15 -0800
committerJunio C Hamano <gitster@pobox.com>2010-02-17 14:55:15 -0800
commit031f82f75124dc96e3bebf8fa0b15eddf5544012 (patch)
tree294a13008dd8a12588453825ed2266be645b1ddd
parent07cb9a369e12633e1e43e0acded32885592a455c (diff)
parent1123c67ceee2f310b08ab5d67b076ef04ab59bfc (diff)
downloadgit-031f82f75124dc96e3bebf8fa0b15eddf5544012.tar.gz
git-031f82f75124dc96e3bebf8fa0b15eddf5544012.tar.xz
Merge branch 'jk/grep-double-dash' into maint
* jk/grep-double-dash: accept "git grep -- pattern"
-rw-r--r--builtin-grep.c10
-rwxr-xr-xt/t7002-grep.sh33
2 files changed, 43 insertions, 0 deletions
diff --git a/builtin-grep.c b/builtin-grep.c
index 362122c43..26979577d 100644
--- a/builtin-grep.c
+++ b/builtin-grep.c
@@ -868,6 +868,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,
diff --git a/t/t7002-grep.sh b/t/t7002-grep.sh
index 7144f815c..0b583cbfc 100755
--- a/t/t7002-grep.sh
+++ b/t/t7002-grep.sh
@@ -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