Merge branch 'fixes'
authorJunio C Hamano <junkio@cox.net>
Tue, 4 Oct 2005 02:13:04 +0000 (19:13 -0700)
committerJunio C Hamano <junkio@cox.net>
Tue, 4 Oct 2005 02:13:04 +0000 (19:13 -0700)
sha1_name.c
symbolic-ref.c

index 8920de1..f64755f 100644 (file)
@@ -91,14 +91,23 @@ static int find_short_packed_object(int len, const unsigned char *match, unsigne
                        last = mid;
                }
                if (first < num) {
-                       unsigned char now[20];
+                       unsigned char now[20], next[20];
                        nth_packed_object_sha1(p, first, now);
                        if (match_sha(len, match, now)) {
-                               if (!found) {
-                                       memcpy(found_sha1, now, 20);
-                                       found++;
+                               if (nth_packed_object_sha1(p, first+1, next) ||
+                                   !match_sha(len, match, next)) {
+                                       /* unique within this pack */
+                                       if (!found) {
+                                               memcpy(found_sha1, now, 20);
+                                               found++;
+                                       }
+                                       else if (memcmp(found_sha1, now, 20)) {
+                                               found = 2;
+                                               break;
+                                       }
                                }
-                               else if (memcmp(found_sha1, now, 20)) {
+                               else {
+                                       /* not even unique within this pack */
                                        found = 2;
                                        break;
                                }
@@ -121,7 +130,7 @@ static int find_unique_short_object(int len, char *canonical,
        if (!has_unpacked && !has_packed)
                return -1;
        if (1 < has_unpacked || 1 < has_packed)
-               return -1;
+               return error("short SHA1 %.*s is ambiguous.", len, canonical);
        if (has_unpacked != has_packed) {
                memcpy(sha1, (has_packed ? packed_sha1 : unpacked_sha1), 20);
                return 0;
index af087d2..a72d7ac 100644 (file)
@@ -3,7 +3,7 @@
 static const char git_symbolic_ref_usage[] =
 "git-symbolic-ref name [ref]";
 
-static int check_symref(const char *HEAD)
+static void check_symref(const char *HEAD)
 {
        unsigned char sha1[20];
        const char *git_HEAD = strdup(git_path("%s", HEAD));