Breaking down the fields in the interface makes it easier to change the backend of for_each_alternate_ref to something that doesn't use "struct ref" internally. The only field that callers actually look at is the oid, anyway. The refname is kept in the interface as a plausible thing for future code to want. Signed-off-by: Jeff King <peff@xxxxxxxx> --- builtin/receive-pack.c | 6 ++++-- fetch-pack.c | 12 ++++++++---- transport.c | 2 +- transport.h | 2 +- 4 files changed, 14 insertions(+), 8 deletions(-) diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c index 6b97cbdbe..b9f2c0cc5 100644 --- a/builtin/receive-pack.c +++ b/builtin/receive-pack.c @@ -277,10 +277,12 @@ static int show_one_alternate_sha1(const unsigned char sha1[20], void *unused) return 0; } -static void collect_one_alternate_ref(const struct ref *ref, void *data) +static void collect_one_alternate_ref(const char *refname, + const struct object_id *oid, + void *data) { struct sha1_array *sa = data; - sha1_array_append(sa, ref->old_oid.hash); + sha1_array_append(sa, oid->hash); } static void write_head_info(void) diff --git a/fetch-pack.c b/fetch-pack.c index 601f0779a..54f84c573 100644 --- a/fetch-pack.c +++ b/fetch-pack.c @@ -253,9 +253,11 @@ static void send_request(struct fetch_pack_args *args, write_or_die(fd, buf->buf, buf->len); } -static void insert_one_alternate_ref(const struct ref *ref, void *unused) +static void insert_one_alternate_ref(const char *refname, + const struct object_id *oid, + void *unused) { - rev_list_insert_ref(NULL, ref->old_oid.hash); + rev_list_insert_ref(NULL, oid->hash); } #define INITIAL_FLUSH 16 @@ -619,9 +621,11 @@ static void filter_refs(struct fetch_pack_args *args, *refs = newlist; } -static void mark_alternate_complete(const struct ref *ref, void *unused) +static void mark_alternate_complete(const char *refname, + const struct object_id *oid, + void *unused) { - mark_complete(ref->old_oid.hash); + mark_complete(oid->hash); } static int everything_local(struct fetch_pack_args *args, diff --git a/transport.c b/transport.c index 594533d88..983d8fec1 100644 --- a/transport.c +++ b/transport.c @@ -1231,7 +1231,7 @@ static int refs_from_alternate_cb(struct alternate_object_database *e, for (extra = transport_get_remote_refs(transport); extra; extra = extra->next) - cb->fn(extra, cb->data); + cb->fn(extra->name, &extra->old_oid, cb->data); transport_disconnect(transport); out: strbuf_release(&path); diff --git a/transport.h b/transport.h index 9820f10b8..b7bb07d2c 100644 --- a/transport.h +++ b/transport.h @@ -254,6 +254,6 @@ int transport_refs_pushed(struct ref *ref); void transport_print_push_status(const char *dest, struct ref *refs, int verbose, int porcelain, unsigned int *reject_reasons); -typedef void alternate_ref_fn(const struct ref *, void *); +typedef void alternate_ref_fn(const char *refname, const struct object_id *oid, void *); extern void for_each_alternate_ref(alternate_ref_fn, void *); #endif -- 2.11.0.765.g454d2182f