Browse Source

check_filename(): handle ":^" path magic

We special-case "git log :/foo" to work when "foo" exists in
the working tree. But :^ (and its alias :!) do not get the
same treatment, requiring the user to supply a
disambiguating "--". Let's make them work without requiring
the user to type the "--".

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Jeff King 8 years ago committed by Junio C Hamano
parent
commit
42471bcee4
  1. 4
      setup.c
  2. 13
      t/t4208-log-magic-pathspec.sh

4
setup.c

@ -141,6 +141,10 @@ int check_filename(const char *prefix, const char *arg) @@ -141,6 +141,10 @@ int check_filename(const char *prefix, const char *arg)
if (!*arg) /* ":/" is root dir, always exists */
return 1;
prefix = NULL;
} else if (skip_prefix(arg, ":!", &arg) ||
skip_prefix(arg, ":^", &arg)) {
if (!*arg) /* excluding everything is silly, but allowed */
return 1;
}

if (prefix)

13
t/t4208-log-magic-pathspec.sh

@ -52,6 +52,19 @@ test_expect_success 'git log HEAD -- :/' ' @@ -52,6 +52,19 @@ test_expect_success 'git log HEAD -- :/' '
test_cmp expected actual
'

test_expect_success '"git log :^sub" is not ambiguous' '
git log :^sub
'

test_expect_success '"git log :^does-not-exist" does not match anything' '
test_must_fail git log :^does-not-exist
'

test_expect_success '"git log :!" behaves the same as :^' '
git log :!sub &&
test_must_fail git log :!does-not-exist
'

test_expect_success 'command line pathspec parsing for "git log"' '
git reset --hard &&
>a &&

Loading…
Cancel
Save