Browse Source

for_each_alternate_ref: pass name/oid instead of ref struct

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@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Jeff King 8 years ago committed by Junio C Hamano
parent
commit
2429d63a46
  1. 6
      builtin/receive-pack.c
  2. 12
      fetch-pack.c
  3. 2
      transport.c
  4. 2
      transport.h

6
builtin/receive-pack.c

@ -277,10 +277,12 @@ static int show_one_alternate_sha1(const unsigned char sha1[20], void *unused) @@ -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)

12
fetch-pack.c

@ -253,9 +253,11 @@ static void send_request(struct fetch_pack_args *args, @@ -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, @@ -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,

2
transport.c

@ -1238,7 +1238,7 @@ static int refs_from_alternate_cb(struct alternate_object_database *e, @@ -1238,7 +1238,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);

2
transport.h

@ -255,6 +255,6 @@ int transport_refs_pushed(struct ref *ref); @@ -255,6 +255,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

Loading…
Cancel
Save