diff options
author | Junio C Hamano <gitster@pobox.com> | 2011-03-22 21:37:53 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-03-22 21:37:53 -0700 |
commit | 91b3c7ce8e189b90d3203265c9625806a15045e1 (patch) | |
tree | 2287f84dbd07706e74db16896e8e7f3a7d6dd7ed /builtin/receive-pack.c | |
parent | 1c92e394468c927f129c8f2a138b760f884e3bed (diff) | |
parent | e52d719266a06a8553043cb5616d9b4ce4abd27a (diff) | |
download | git-91b3c7ce8e189b90d3203265c9625806a15045e1.tar.gz |
Merge branch 'jc/maint-fetch-alt'
* jc/maint-fetch-alt:
fetch-pack: objects in our alternates are available to us
refs_from_alternate: helper to use refs from alternates
Conflicts:
builtin/receive-pack.c
Diffstat (limited to 'builtin/receive-pack.c')
-rw-r--r-- | builtin/receive-pack.c | 35 |
1 files changed, 3 insertions, 32 deletions
diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c index d8e2c5fca7..27050e7c16 100644 --- a/builtin/receive-pack.c +++ b/builtin/receive-pack.c @@ -731,43 +731,14 @@ static int delete_only(struct command *commands) return 1; } -static int add_refs_from_alternate(struct alternate_object_database *e, void *unused) +static void add_one_alternate_ref(const struct ref *ref, void *unused) { - char *other; - size_t len; - struct remote *remote; - struct transport *transport; - const struct ref *extra; - - e->name[-1] = '\0'; - other = xstrdup(real_path(e->base)); - e->name[-1] = '/'; - len = strlen(other); - - while (other[len-1] == '/') - other[--len] = '\0'; - if (len < 8 || memcmp(other + len - 8, "/objects", 8)) - return 0; - /* Is this a git repository with refs? */ - memcpy(other + len - 8, "/refs", 6); - if (!is_directory(other)) - return 0; - other[len - 8] = '\0'; - remote = remote_get(other); - transport = transport_get(remote, other); - for (extra = transport_get_remote_refs(transport); - extra; - extra = extra->next) { - add_extra_ref(".have", extra->old_sha1, 0); - } - transport_disconnect(transport); - free(other); - return 0; + add_extra_ref(".have", ref->old_sha1, 0); } static void add_alternate_refs(void) { - foreach_alt_odb(add_refs_from_alternate, NULL); + foreach_alt_odb(refs_from_alternate_cb, add_one_alternate_ref); } int cmd_receive_pack(int argc, const char **argv, const char *prefix) |