There is a data structure mismatch between what the transport code wants (a linked list of "struct ref") and what the bundle header provides (an array of ref names and sha1s), so the transport code has to convert. Let's factor out this conversion to make it useful to other transport-ish callers (like remote-curl). Signed-off-by: Jeff King <peff@xxxxxxxx> --- bundle.c | 16 ++++++++++++++++ bundle.h | 2 ++ transport.c | 11 +---------- 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/bundle.c b/bundle.c index 08020bc..e48fe2f 100644 --- a/bundle.c +++ b/bundle.c @@ -7,6 +7,7 @@ #include "list-objects.h" #include "run-command.h" #include "refs.h" +#include "remote.h" static const char bundle_signature[] = "# v2 git bundle\n"; @@ -449,3 +450,18 @@ int unbundle(struct bundle_header *header, int bundle_fd, int flags) return error("index-pack died"); return 0; } + +struct ref *bundle_header_to_refs(const struct bundle_header *header) +{ + struct ref *result = NULL; + int i; + + for (i = 0; i < header->references.nr; i++) { + struct ref_list_entry *e = header->references.list + i; + struct ref *ref = alloc_ref(e->name); + hashcpy(ref->old_sha1, e->sha1); + ref->next = result; + result = ref; + } + return result; +} diff --git a/bundle.h b/bundle.h index 1584e4d..675cc97 100644 --- a/bundle.h +++ b/bundle.h @@ -24,4 +24,6 @@ int create_bundle(struct bundle_header *header, const char *path, int list_bundle_refs(struct bundle_header *header, int argc, const char **argv); +struct ref *bundle_header_to_refs(const struct bundle_header *header); + #endif diff --git a/transport.c b/transport.c index 51814b5..5020bbb 100644 --- a/transport.c +++ b/transport.c @@ -407,8 +407,6 @@ struct bundle_transport_data { static struct ref *get_refs_from_bundle(struct transport *transport, int for_push) { struct bundle_transport_data *data = transport->data; - struct ref *result = NULL; - int i; if (for_push) return NULL; @@ -418,14 +416,7 @@ struct bundle_transport_data { data->fd = read_bundle_header(transport->url, &data->header); if (data->fd < 0) die ("Could not read bundle '%s'.", transport->url); - for (i = 0; i < data->header.references.nr; i++) { - struct ref_list_entry *e = data->header.references.list + i; - struct ref *ref = alloc_ref(e->name); - hashcpy(ref->old_sha1, e->sha1); - ref->next = result; - result = ref; - } - return result; + return bundle_header_to_refs(&data->header); } static int fetch_refs_from_bundle(struct transport *transport, -- 1.7.7.2.7.g9f96f -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html