]> git.ipfire.org Git - thirdparty/git.git/commit - cache.h
add global --literal-pathspecs option
authorJeff King <peff@peff.net>
Wed, 19 Dec 2012 22:37:30 +0000 (17:37 -0500)
committerJunio C Hamano <gitster@pobox.com>
Wed, 19 Dec 2012 22:58:59 +0000 (14:58 -0800)
commit823ab40fd4adc5bf5b5c66b6d189deae34d2a138
tree313e0f7de9bceb1e44b92aaf0be8aaeca457ec8d
parent18499ba694711c02a5bc729b7f8e362dd760b10a
add global --literal-pathspecs option

Git takes pathspec arguments in many places to limit the
scope of an operation. These pathspecs are treated not as
literal paths, but as glob patterns that can be fed to
fnmatch. When a user is giving a specific pattern, this is a
nice feature.

However, when programatically providing pathspecs, it can be
a nuisance. For example, to find the latest revision which
modified "$foo", one can use "git rev-list -- $foo". But if
"$foo" contains glob characters (e.g., "f*"), it will
erroneously match more entries than desired. The caller
needs to quote the characters in $foo, and even then, the
results may not be exactly the same as with a literal
pathspec. For instance, the depth checks in
match_pathspec_depth do not kick in if we match via fnmatch.

This patch introduces a global command-line option (i.e.,
one for "git" itself, not for specific commands) to turn
this behavior off. It also has a matching environment
variable, which can make it easier if you are a script or
porcelain interface that is going to issue many such
commands.

This option cannot turn off globbing for particular
pathspecs. That could eventually be done with a ":(noglob)"
magic pathspec prefix. However, that level of granularity is
more cumbersome to use for many cases, and doing ":(noglob)"
right would mean converting the whole codebase to use
"struct pathspec", as the usual "const char **pathspec"
cannot represent extra per-item flags.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git.txt
cache.h
dir.c
git.c
t/t6130-pathspec-noglob.sh [new file with mode: 0755]