builtin/show-branch: rewrite functions to take object_id arguments
[gitweb.git] / upload-pack.c
index b531a325d2864e94bdc86e689f78663255bb7cf2..52fab239ac69fb607246669bc725aa6a5d478e2f 100644 (file)
@@ -74,7 +74,7 @@ static int write_one_shallow(const struct commit_graft *graft, void *cb_data)
 {
        FILE *fp = cb_data;
        if (graft->nr_parent == -1)
-               fprintf(fp, "--shallow %s\n", sha1_to_hex(graft->sha1));
+               fprintf(fp, "--shallow %s\n", oid_to_hex(&graft->oid));
        return 0;
 }
 
@@ -681,7 +681,7 @@ static void receive_needs(void)
 }
 
 /* return non-zero if the ref is hidden, otherwise 0 */
-static int mark_our_ref(const char *refname, const unsigned char *sha1, int flag, void *cb_data)
+static int mark_our_ref(const char *refname, const unsigned char *sha1)
 {
        struct object *o = lookup_unknown_object(sha1);
 
@@ -689,12 +689,16 @@ static int mark_our_ref(const char *refname, const unsigned char *sha1, int flag
                o->flags |= HIDDEN_REF;
                return 1;
        }
-       if (!o)
-               die("git upload-pack: cannot find object %s:", sha1_to_hex(sha1));
        o->flags |= OUR_REF;
        return 0;
 }
 
+static int check_ref(const char *refname, const unsigned char *sha1, int flag, void *cb_data)
+{
+       mark_our_ref(refname, sha1);
+       return 0;
+}
+
 static void format_symref_info(struct strbuf *buf, struct string_list *symref)
 {
        struct string_list_item *item;
@@ -713,7 +717,7 @@ static int send_ref(const char *refname, const unsigned char *sha1, int flag, vo
        const char *refname_nons = strip_namespace(refname);
        unsigned char peeled[20];
 
-       if (mark_our_ref(refname, sha1, flag, NULL))
+       if (mark_our_ref(refname, sha1))
                return 0;
 
        if (capabilities) {
@@ -757,18 +761,26 @@ static int find_symref(const char *refname, const unsigned char *sha1, int flag,
 static void upload_pack(void)
 {
        struct string_list symref = STRING_LIST_INIT_DUP;
+       struct each_ref_fn_sha1_adapter wrapped_find_symref =
+               {find_symref, &symref};
 
-       head_ref_namespaced(find_symref, &symref);
+       head_ref_namespaced(each_ref_fn_adapter, &wrapped_find_symref);
 
        if (advertise_refs || !stateless_rpc) {
+               struct each_ref_fn_sha1_adapter wrapped_send_ref =
+                       {send_ref, &symref};
+
                reset_timeout();
-               head_ref_namespaced(send_ref, &symref);
-               for_each_namespaced_ref(send_ref, &symref);
+               head_ref_namespaced(each_ref_fn_adapter, &wrapped_send_ref);
+               for_each_namespaced_ref(each_ref_fn_adapter, &wrapped_send_ref);
                advertise_shallow_grafts(1);
                packet_flush(1);
        } else {
-               head_ref_namespaced(mark_our_ref, NULL);
-               for_each_namespaced_ref(mark_our_ref, NULL);
+               struct each_ref_fn_sha1_adapter wrapped_check_ref =
+                       {check_ref, NULL};
+
+               head_ref_namespaced(each_ref_fn_adapter, &wrapped_check_ref);
+               for_each_namespaced_ref(each_ref_fn_adapter, &wrapped_check_ref);
        }
        string_list_clear(&symref, 1);
        if (advertise_refs)