1#ifndef FETCH_PACK_H 2#define FETCH_PACK_H 3 4#include "string-list.h" 5#include "run-command.h" 6#include "protocol.h" 7#include "list-objects-filter-options.h" 8 9struct oid_array; 10 11struct fetch_pack_args { 12 const char *uploadpack; 13 int unpacklimit; 14 int depth; 15 const char *deepen_since; 16 const struct string_list *deepen_not; 17 struct list_objects_filter_options filter_options; 18 const struct string_list *server_options; 19 20 /* 21 * If not NULL, during packfile negotiation, fetch-pack will send "have" 22 * lines only with these tips and their ancestors. 23 */ 24 const struct oid_array *negotiation_tips; 25 26 unsigned deepen_relative:1; 27 unsigned quiet:1; 28 unsigned keep_pack:1; 29 unsigned lock_pack:1; 30 unsigned use_thin_pack:1; 31 unsigned fetch_all:1; 32 unsigned stdin_refs:1; 33 unsigned diag_url:1; 34 unsigned verbose:1; 35 unsigned no_progress:1; 36 unsigned include_tag:1; 37 unsigned stateless_rpc:1; 38 unsigned check_self_contained_and_connected:1; 39 unsigned self_contained_and_connected:1; 40 unsigned cloning:1; 41 unsigned update_shallow:1; 42 unsigned deepen:1; 43 unsigned from_promisor:1; 44 45 /* 46 * If 1, fetch_pack() will also not modify any object flags. 47 * This allows fetch_pack() to safely be called by any function, 48 * regardless of which object flags it uses (if any). 49 */ 50 unsigned no_dependents:1; 51 52 /* 53 * Because fetch_pack() overwrites the shallow file upon a 54 * successful deepening non-clone fetch, if this struct 55 * specifies such a fetch, fetch_pack() needs to perform a 56 * connectivity check before deciding if a fetch is successful 57 * (and overwriting the shallow file). fetch_pack() sets this 58 * field to 1 if such a connectivity check was performed. 59 * 60 * This is different from check_self_contained_and_connected 61 * in that the former allows existing objects in the 62 * repository to satisfy connectivity needs, whereas the 63 * latter doesn't. 64 */ 65 unsigned connectivity_checked:1; 66}; 67 68/* 69 * sought represents remote references that should be updated from. 70 * On return, the names that were found on the remote will have been 71 * marked as such. 72 */ 73struct ref *fetch_pack(struct fetch_pack_args *args, 74 int fd[], struct child_process *conn, 75 const struct ref *ref, 76 const char *dest, 77 struct ref **sought, 78 int nr_sought, 79 struct oid_array *shallow, 80 char **pack_lockfile, 81 enum protocol_version version); 82 83/* 84 * Print an appropriate error message for each sought ref that wasn't 85 * matched. Return 0 if all sought refs were matched, otherwise 1. 86 */ 87int report_unmatched_refs(struct ref **sought, int nr_sought); 88 89#endif