• J
    add global --literal-pathspecs option · 823ab40f
    Jeff King 提交于
    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: NJeff King <peff@peff.net>
    Signed-off-by: NJunio C Hamano <gitster@pobox.com>
    823ab40f
cache.h 44.9 KB