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
This commit is contained in:
@ -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)
|
||||
|
Reference in New Issue
Block a user