]>
Commit | Line | Data |
---|---|---|
88e2f9ed JT |
1 | #include "cache.h" |
2 | #include "packfile.h" | |
3 | #include "pkt-line.h" | |
4 | #include "strbuf.h" | |
5 | #include "transport.h" | |
6 | #include "fetch-object.h" | |
7 | ||
c0c578b3 | 8 | static void fetch_refs(const char *remote_name, struct ref *ref) |
88e2f9ed JT |
9 | { |
10 | struct remote *remote; | |
11 | struct transport *transport; | |
8b4c0103 | 12 | int original_fetch_if_missing = fetch_if_missing; |
88e2f9ed | 13 | |
8b4c0103 | 14 | fetch_if_missing = 0; |
88e2f9ed JT |
15 | remote = remote_get(remote_name); |
16 | if (!remote->url[0]) | |
17 | die(_("Remote with no URL")); | |
18 | transport = transport_get(remote, remote->url[0]); | |
19 | ||
88e2f9ed JT |
20 | transport_set_option(transport, TRANS_OPT_FROM_PROMISOR, "1"); |
21 | transport_set_option(transport, TRANS_OPT_NO_DEPENDENTS, "1"); | |
22 | transport_fetch_refs(transport, ref); | |
8b4c0103 | 23 | fetch_if_missing = original_fetch_if_missing; |
88e2f9ed | 24 | } |
c0c578b3 JT |
25 | |
26 | void fetch_object(const char *remote_name, const unsigned char *sha1) | |
27 | { | |
28 | struct ref *ref = alloc_ref(sha1_to_hex(sha1)); | |
29 | hashcpy(ref->old_oid.hash, sha1); | |
30 | fetch_refs(remote_name, ref); | |
31 | } | |
32 | ||
33 | void fetch_objects(const char *remote_name, const struct oid_array *to_fetch) | |
34 | { | |
35 | struct ref *ref = NULL; | |
36 | int i; | |
37 | ||
38 | for (i = 0; i < to_fetch->nr; i++) { | |
39 | struct ref *new_ref = alloc_ref(oid_to_hex(&to_fetch->oid[i])); | |
40 | oidcpy(&new_ref->old_oid, &to_fetch->oid[i]); | |
41 | new_ref->next = ref; | |
42 | ref = new_ref; | |
43 | } | |
44 | fetch_refs(remote_name, ref); | |
45 | } |