mirror of
https://github.com/git/git
synced 2024-08-27 19:49:21 +00:00
![Brandon Williams](/assets/img/avatar_default.png)
Expand the transport fetch method signature, by adding an output parameter, to allow transports to return information about the refs they have fetched. Then communicate shallow status information through this mechanism instead of by modifying the input list of refs. This does require clients to sometimes generate the ref map twice: once from the list of refs provided by the remote (as is currently done) and potentially once from the new list of refs that the fetch mechanism provides. Signed-off-by: Brandon Williams <bmwill@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
46 lines
1.2 KiB
C
46 lines
1.2 KiB
C
#include "cache.h"
|
|
#include "packfile.h"
|
|
#include "pkt-line.h"
|
|
#include "strbuf.h"
|
|
#include "transport.h"
|
|
#include "fetch-object.h"
|
|
|
|
static void fetch_refs(const char *remote_name, struct ref *ref)
|
|
{
|
|
struct remote *remote;
|
|
struct transport *transport;
|
|
int original_fetch_if_missing = fetch_if_missing;
|
|
|
|
fetch_if_missing = 0;
|
|
remote = remote_get(remote_name);
|
|
if (!remote->url[0])
|
|
die(_("Remote with no URL"));
|
|
transport = transport_get(remote, remote->url[0]);
|
|
|
|
transport_set_option(transport, TRANS_OPT_FROM_PROMISOR, "1");
|
|
transport_set_option(transport, TRANS_OPT_NO_DEPENDENTS, "1");
|
|
transport_fetch_refs(transport, ref, NULL);
|
|
fetch_if_missing = original_fetch_if_missing;
|
|
}
|
|
|
|
void fetch_object(const char *remote_name, const unsigned char *sha1)
|
|
{
|
|
struct ref *ref = alloc_ref(sha1_to_hex(sha1));
|
|
hashcpy(ref->old_oid.hash, sha1);
|
|
fetch_refs(remote_name, ref);
|
|
}
|
|
|
|
void fetch_objects(const char *remote_name, const struct oid_array *to_fetch)
|
|
{
|
|
struct ref *ref = NULL;
|
|
int i;
|
|
|
|
for (i = 0; i < to_fetch->nr; i++) {
|
|
struct ref *new_ref = alloc_ref(oid_to_hex(&to_fetch->oid[i]));
|
|
oidcpy(&new_ref->old_oid, &to_fetch->oid[i]);
|
|
new_ref->next = ref;
|
|
ref = new_ref;
|
|
}
|
|
fetch_refs(remote_name, ref);
|
|
}
|