diff options
author | Junio C Hamano <gitster@pobox.com> | 2013-01-30 08:52:53 -0800 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2013-01-30 08:52:53 -0800 |
commit | 7b5196909c7773a3ce6d3cd0ba78f42249bf27c3 (patch) | |
tree | 643b5ad7f520dd456d35ab0e7e86c69da665ce7c | |
parent | b596574ed30a9353fabc55c4548e80c4df4d009e (diff) | |
parent | 0b0ecaac2ad984599923999d6d4c32e6111bb73f (diff) | |
download | git-7b5196909c7773a3ce6d3cd0ba78f42249bf27c3.tar.gz |
Merge branch 'nd/magic-pathspec-from-root'
When giving arguments without "--" disambiguation, object names
that come earlier on the command line must not be interpretable as
pathspecs and pathspecs that come later on the command line must
not be interpretable as object names. Tweak the disambiguation
rule so that ":/" (no other string before or after) is always
interpreted as a pathspec, to avoid having to say "git cmd -- :/".
* nd/magic-pathspec-from-root:
grep: avoid accepting ambiguous revision
Update :/abc ambiguity check
-rw-r--r-- | builtin/grep.c | 2 | ||||
-rw-r--r-- | setup.c | 9 | ||||
-rwxr-xr-x | t/t4208-log-magic-pathspec.sh | 17 |
3 files changed, 25 insertions, 3 deletions
diff --git a/builtin/grep.c b/builtin/grep.c index 0e1b6c860e..8025964987 100644 --- a/builtin/grep.c +++ b/builtin/grep.c @@ -823,6 +823,8 @@ int cmd_grep(int argc, const char **argv, const char *prefix) struct object *object = parse_object(sha1); if (!object) die(_("bad object %s"), arg); + if (!seen_dashdash) + verify_non_filename(prefix, arg); add_object_array(object, arg, &list); continue; } @@ -66,7 +66,14 @@ int check_filename(const char *prefix, const char *arg) const char *name; struct stat st; - name = prefix ? prefix_filename(prefix, strlen(prefix), arg) : arg; + if (!prefixcmp(arg, ":/")) { + if (arg[2] == '\0') /* ":/" is root dir, always exists */ + return 1; + name = arg + 2; + } else if (prefix) + name = prefix_filename(prefix, strlen(prefix), arg); + else + name = arg; if (!lstat(name, &st)) return 1; /* file exists */ if (errno == ENOENT || errno == ENOTDIR) diff --git a/t/t4208-log-magic-pathspec.sh b/t/t4208-log-magic-pathspec.sh index 2c482b622b..72300b5f24 100755 --- a/t/t4208-log-magic-pathspec.sh +++ b/t/t4208-log-magic-pathspec.sh @@ -11,11 +11,24 @@ test_expect_success 'setup' ' mkdir sub ' -test_expect_success '"git log :/" should be ambiguous' ' - test_must_fail git log :/ 2>error && +test_expect_success '"git log :/" should not be ambiguous' ' + git log :/ +' + +test_expect_success '"git log :/a" should be ambiguous (applied both rev and worktree)' ' + : >a && + test_must_fail git log :/a 2>error && grep ambiguous error ' +test_expect_success '"git log :/a -- " should not be ambiguous' ' + git log :/a -- +' + +test_expect_success '"git log -- :/a" should not be ambiguous' ' + git log -- :/a +' + test_expect_success '"git log :" should be ambiguous' ' test_must_fail git log : 2>error && grep ambiguous error |