aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff King <peff@peff.net>2017-05-26 15:08:39 -0400
committerJunio C Hamano <gitster@pobox.com>2017-05-29 11:36:56 +0900
commit42471bcee44e87669eb17f9fa13c8041a0fc35a1 (patch)
tree3196bc85d53e27c7c66fea8f5ab85db54fcfdd1f
parentd51c6ee0d4bbeaf28bcd6c5f1681d208ee75763d (diff)
downloadgit-42471bcee44e87669eb17f9fa13c8041a0fc35a1.tar.gz
git-42471bcee44e87669eb17f9fa13c8041a0fc35a1.tar.xz
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.c4
-rwxr-xr-xt/t4208-log-magic-pathspec.sh13
2 files changed, 17 insertions, 0 deletions
diff --git a/setup.c b/setup.c
index f2a8070bd..86bb7c9a9 100644
--- a/setup.c
+++ b/setup.c
@@ -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 70bc64100..627890d7d 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 &&