diff options
author | Jeff King <peff@peff.net> | 2017-05-26 15:08:39 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-05-29 11:36:56 +0900 |
commit | 42471bcee44e87669eb17f9fa13c8041a0fc35a1 (patch) | |
tree | 3196bc85d53e27c7c66fea8f5ab85db54fcfdd1f | |
parent | d51c6ee0d4bbeaf28bcd6c5f1681d208ee75763d (diff) | |
download | git-42471bcee44e87669eb17f9fa13c8041a0fc35a1.tar.gz |
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>
-rw-r--r-- | setup.c | 4 | ||||
-rwxr-xr-x | t/t4208-log-magic-pathspec.sh | 13 |
2 files changed, 17 insertions, 0 deletions
@@ -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) diff --git a/t/t4208-log-magic-pathspec.sh b/t/t4208-log-magic-pathspec.sh index 70bc64100b..627890d7d8 100755 --- a/t/t4208-log-magic-pathspec.sh +++ b/t/t4208-log-magic-pathspec.sh @@ -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 && |