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 { 12const char*uploadpack; 13int unpacklimit; 14int depth; 15const char*deepen_since; 16const struct string_list *deepen_not; 17struct list_objects_filter_options filter_options; 18const 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 */ 24const struct oid_array *negotiation_tips; 25 26unsigned deepen_relative:1; 27unsigned quiet:1; 28unsigned keep_pack:1; 29unsigned lock_pack:1; 30unsigned use_thin_pack:1; 31unsigned fetch_all:1; 32unsigned stdin_refs:1; 33unsigned diag_url:1; 34unsigned verbose:1; 35unsigned no_progress:1; 36unsigned include_tag:1; 37unsigned stateless_rpc:1; 38unsigned check_self_contained_and_connected:1; 39unsigned self_contained_and_connected:1; 40unsigned cloning:1; 41unsigned update_shallow:1; 42unsigned deepen:1; 43unsigned 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 */ 50unsigned 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 */ 65unsigned 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, 74int fd[],struct child_process *conn, 75const struct ref *ref, 76const char*dest, 77struct ref **sought, 78int nr_sought, 79struct oid_array *shallow, 80char**pack_lockfile, 81enum 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 */ 87intreport_unmatched_refs(struct ref **sought,int nr_sought); 88 89#endif