submodule: try harder to fetch needed sha1 by direct fetching sha1
[gitweb.git] / remote-curl.c
index cc7a8a66faa96ba9bc8ae82e72d0202c0a802ba1..f404faf0f4b9ec298ccbae34fae0c79283884d26 100644 (file)
@@ -169,7 +169,7 @@ static struct ref *parse_info_refs(struct discovery *heads)
                        data[i] = 0;
                        ref_name = mid + 1;
                        ref = alloc_ref(ref_name);
-                       get_sha1_hex(start, ref->old_sha1);
+                       get_oid_hex(start, &ref->old_oid);
                        if (!refs)
                                refs = ref;
                        if (last_ref)
@@ -348,7 +348,7 @@ static void output_refs(struct ref *refs)
                if (posn->symref)
                        printf("@%s %s\n", posn->symref, posn->name);
                else
-                       printf("%s %s\n", sha1_to_hex(posn->old_sha1), posn->name);
+                       printf("%s %s\n", oid_to_hex(&posn->old_oid), posn->name);
        }
        printf("\n");
        fflush(stdout);
@@ -702,7 +702,7 @@ static int fetch_dumb(int nr_heads, struct ref **to_fetch)
        if (options.depth)
                die("dumb http transport does not support --depth");
        for (i = 0; i < nr_heads; i++)
-               targets[i] = xstrdup(sha1_to_hex(to_fetch[i]->old_sha1));
+               targets[i] = xstrdup(oid_to_hex(&to_fetch[i]->old_oid));
 
        walker = get_http_walker(url.buf);
        walker->get_all = 1;
@@ -763,7 +763,7 @@ static int fetch_git(struct discovery *heads,
                if (!*ref->name)
                        die("cannot fetch by sha1 over smart http");
                packet_buf_write(&preamble, "%s %s\n",
-                                sha1_to_hex(ref->old_sha1), ref->name);
+                                oid_to_hex(&ref->old_oid), ref->name);
        }
        packet_buf_flush(&preamble);
 
@@ -803,19 +803,19 @@ static void parse_fetch(struct strbuf *buf)
                if (skip_prefix(buf->buf, "fetch ", &p)) {
                        const char *name;
                        struct ref *ref;
-                       unsigned char old_sha1[20];
+                       struct object_id old_oid;
 
-                       if (strlen(p) < 40 || get_sha1_hex(p, old_sha1))
+                       if (get_oid_hex(p, &old_oid))
                                die("protocol error: expected sha/ref, got %s'", p);
-                       if (p[40] == ' ')
-                               name = p + 41;
-                       else if (!p[40])
+                       if (p[GIT_SHA1_HEXSZ] == ' ')
+                               name = p + GIT_SHA1_HEXSZ + 1;
+                       else if (!p[GIT_SHA1_HEXSZ])
                                name = "";
                        else
                                die("protocol error: expected sha/ref, got %s'", p);
 
                        ref = alloc_ref(name);
-                       hashcpy(ref->old_sha1, old_sha1);
+                       oidcpy(&ref->old_oid, &old_oid);
 
                        *list = ref;
                        list = &ref->next;