X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=sha1_name.c;h=b13ed78cee0ee7f6d5ed3b45acee7b308a02c3f6;hb=457f06d68e427bbf4f1a921877441a622a05e5c4;hp=bf8f0f0e1feef55ba6be764f60815d15036efa4e;hpb=6677c4665af2d73f670bec382bc82d0f2e9513fb;p=git.git diff --git a/sha1_name.c b/sha1_name.c index bf8f0f0e..b13ed78c 100644 --- a/sha1_name.c +++ b/sha1_name.c @@ -188,7 +188,10 @@ const char *find_unique_abbrev(const unsigned char *sha1, int len) { int status; static char hex[41]; + memcpy(hex, sha1_to_hex(sha1), 40); + if (len == 40) + return hex; while (len < 40) { unsigned char sha1_ret[20]; status = get_short_sha1(hex, len, sha1_ret, 1); @@ -223,7 +226,7 @@ static int ambiguous_path(const char *path, int len) slash = 0; continue; } - return slash; + break; } return slash; } @@ -238,7 +241,6 @@ static int get_sha1_basic(const char *str, int len, unsigned char *sha1) NULL }; const char **p; - int found = 0; if (len == 40 && !get_sha1_hex(str, sha1)) return 0; @@ -249,36 +251,10 @@ static int get_sha1_basic(const char *str, int len, unsigned char *sha1) for (p = prefix; *p; p++) { char *pathname = git_path("%s/%.*s", *p, len, str); - - if (!read_ref(pathname, sha1)) { - /* Must be unique; i.e. when heads/foo and - * tags/foo are both present, reject "foo". - */ - if (1 < found++) - return -1; - } - - /* We want to allow .git/description file and - * "description" branch to exist at the same time. - * "git-rev-parse description" should silently skip - * .git/description file as a candidate for - * get_sha1(). However, having garbage file anywhere - * under refs/ is not OK, and we would not have caught - * ambiguous heads and tags with the above test. - */ - else if (**p && !access(pathname, F_OK)) { - /* Garbage exists under .git/refs */ - return error("garbage ref found '%s'", pathname); - } - } - switch (found) { - case 0: - return -1; - case 1: - return 0; - default: - return error("ambiguous refname '%.*s'", len, str); + if (!read_ref(pathname, sha1)) + return 0; } + return -1; } static int get_sha1_1(const char *name, int len, unsigned char *sha1);