Skip to content

Commit

Permalink
Merge branch 'nd/magic-pathspec-from-root'
Browse files Browse the repository at this point in the history
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
  • Loading branch information
Junio C Hamano committed Jan 30, 2013
2 parents b596574 + 0b0ecaa commit 7b51969
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 3 deletions.
2 changes: 2 additions & 0 deletions builtin/grep.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
9 changes: 8 additions & 1 deletion setup.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
17 changes: 15 additions & 2 deletions t/t4208-log-magic-pathspec.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down

0 comments on commit 7b51969

Please sign in to comment.