pathspec: make --literal-pathspecs disable pathspec magic
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>
Sun, 14 Jul 2013 08:36:07 +0000 (15:36 +0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 15 Jul 2013 17:56:09 +0000 (10:56 -0700)
--literal-pathspecs and its equivalent environment variable are
probably used for scripting. In that setting, pathspec magic may be
unwanted. Disabling globbing in individual pathspec can be done via
:(literal) magic.

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git.txt
pathspec.c
t/t6130-pathspec-noglob.sh

index b738a40..80139ae 100644 (file)
@@ -450,8 +450,8 @@ help ...`.
        linkgit:git-replace[1] for more information.
 
 --literal-pathspecs::
        linkgit:git-replace[1] for more information.
 
 --literal-pathspecs::
-       Treat pathspecs literally, rather than as glob patterns. This is
-       equivalent to setting the `GIT_LITERAL_PATHSPECS` environment
+       Treat pathspecs literally (i.e. no globbing, no pathspec magic).
+       This is equivalent to setting the `GIT_LITERAL_PATHSPECS` environment
        variable to `1`.
 
 
        variable to `1`.
 
 
index 6a16938..b6d8e74 100644 (file)
@@ -103,7 +103,7 @@ static unsigned prefix_pathspec(struct pathspec_item *item,
        if (literal_global)
                global_magic |= PATHSPEC_LITERAL;
 
        if (literal_global)
                global_magic |= PATHSPEC_LITERAL;
 
-       if (elt[0] != ':') {
+       if (elt[0] != ':' || literal_global) {
                ; /* nothing to do */
        } else if (elt[1] == '(') {
                /* longhand */
                ; /* nothing to do */
        } else if (elt[1] == '(') {
                /* longhand */
index 49c148e..8551b02 100755 (executable)
@@ -77,6 +77,12 @@ test_expect_success 'no-glob option matches literally (bracket)' '
        test_cmp expect actual
 '
 
        test_cmp expect actual
 '
 
+test_expect_success 'no-glob option disables :(literal)' '
+       : >expect &&
+       git --literal-pathspecs log --format=%s -- ":(literal)foo" >actual &&
+       test_cmp expect actual
+'
+
 test_expect_success 'no-glob environment variable works' '
        echo star >expect &&
        GIT_LITERAL_PATHSPECS=1 git log --format=%s -- "f*" >actual &&
 test_expect_success 'no-glob environment variable works' '
        echo star >expect &&
        GIT_LITERAL_PATHSPECS=1 git log --format=%s -- "f*" >actual &&