If you have both a file and a branch named "foo", running: git log foo will complain. We should do the same in rev-parse, and demand that it be disambiguated with: git rev-parse foo -- or git rev-parse -- foo Signed-off-by: Jeff King <peff@xxxxxxxx> --- builtin/rev-parse.c | 12 ++++++++---- t/t1506-rev-parse-diagnosis.sh | 22 ++++++++++++++++++++++ 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/builtin/rev-parse.c b/builtin/rev-parse.c index a60fcd3..a3a58bf 100644 --- a/builtin/rev-parse.c +++ b/builtin/rev-parse.c @@ -781,10 +781,11 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) } /* Not a flag argument */ - if (try_difference(arg)) - continue; - if (try_parent_shorthands(arg)) + if (try_difference(arg) || try_parent_shorthands(arg)) { + if (!has_dashdash) + verify_non_filename(prefix, arg); continue; + } name = arg; type = NORMAL; if (*arg == '^') { @@ -794,8 +795,11 @@ int cmd_rev_parse(int argc, const char **argv, const char *prefix) if (!get_sha1(name, sha1)) { if (verify) revs_count++; - else + else { show_rev(type, sha1, name); + if (!has_dashdash) + verify_non_filename(prefix, arg); + } continue; } if (verify) diff --git a/t/t1506-rev-parse-diagnosis.sh b/t/t1506-rev-parse-diagnosis.sh index 613d9bf..dc1f1dc 100755 --- a/t/t1506-rev-parse-diagnosis.sh +++ b/t/t1506-rev-parse-diagnosis.sh @@ -220,4 +220,26 @@ test_expect_success 'arg before dashdash must be a revision (ambiguous)' ' test_cmp expect actual ' +test_expect_success 'ambiguous arg without dashdash (normal)' ' + >foobar && + git update-ref refs/heads/foobar HEAD && + test_must_fail git rev-parse foobar 2>stderr && + test_i18ngrep ambiguous stderr +' + +test_expect_success 'ambiguous arg without dashdash (difference)' ' + >one..two && + git update-ref refs/heads/one HEAD && + git update-ref refs/heads/two HEAD && + test_must_fail git rev-parse one..two 2>stderr && + test_i18ngrep ambiguous stderr +' + +test_expect_success 'ambiguous arg without dashdash (parents)' ' + >"foobar^@" && + git update-ref refs/heads/foobar HEAD && + test_must_fail git rev-parse foobar^@ 2>stderr && + test_i18ngrep ambiguous stderr +' + test_done -- 1.8.5.524.g6743da6 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html