| Daniel Barkalow | 2d4177c | 2007-09-11 03:03:00 | [diff] [blame] | 1 | #ifndef FETCH_PACK_H |
| 2 | #define FETCH_PACK_H |
| 3 | |
| Michael Haggerty | 8bee93d | 2012-09-09 06:19:40 | [diff] [blame] | 4 | #include "string-list.h" |
| Junio C Hamano | 47a5918 | 2013-07-08 20:56:53 | [diff] [blame] | 5 | #include "run-command.h" |
| Brandon Williams | 685fbd3 | 2018-03-15 17:31:28 | [diff] [blame] | 6 | #include "protocol.h" |
| Jeff Hostetler | 640d8b7 | 2017-12-08 15:58:40 | [diff] [blame] | 7 | #include "list-objects-filter-options.h" |
| Michael Haggerty | 8bee93d | 2012-09-09 06:19:40 | [diff] [blame] | 8 | |
| brian m. carlson | 910650d | 2017-03-31 01:40:00 | [diff] [blame] | 9 | struct oid_array; |
| Nguyễn Thái Ngọc Duy | beea415 | 2013-12-05 13:02:39 | [diff] [blame] | 10 | |
| Jonathan Nieder | 9cba13c | 2011-03-16 07:08:34 | [diff] [blame] | 11 | struct fetch_pack_args { |
| Daniel Barkalow | 2d4177c | 2007-09-11 03:03:00 | [diff] [blame] | 12 | const char *uploadpack; |
| Daniel Barkalow | 2d4177c | 2007-09-11 03:03:00 | [diff] [blame] | 13 | int unpacklimit; |
| Daniel Barkalow | 2d4177c | 2007-09-11 03:03:00 | [diff] [blame] | 14 | int depth; |
| Nguyễn Thái Ngọc Duy | 508ea88 | 2016-06-12 10:53:59 | [diff] [blame] | 15 | const char *deepen_since; |
| Nguyễn Thái Ngọc Duy | a45a260 | 2016-06-12 10:54:04 | [diff] [blame] | 16 | const struct string_list *deepen_not; |
| Jeff Hostetler | 640d8b7 | 2017-12-08 15:58:40 | [diff] [blame] | 17 | struct list_objects_filter_options filter_options; |
| Brandon Williams | 5e3548e | 2018-04-23 22:46:24 | [diff] [blame] | 18 | const struct string_list *server_options; |
| Jonathan Tan | 3390e42 | 2018-07-02 22:39:44 | [diff] [blame] | 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 | |
| Nguyễn Thái Ngọc Duy | cccf74e | 2016-06-12 10:54:09 | [diff] [blame] | 26 | unsigned deepen_relative:1; |
| Nguyễn Thái Ngọc Duy | f6486f0 | 2013-12-05 13:02:38 | [diff] [blame] | 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; |
| Junio C Hamano | 92251b1 | 2014-01-17 20:21:14 | [diff] [blame] | 33 | unsigned diag_url:1; |
| Nguyễn Thái Ngọc Duy | f6486f0 | 2013-12-05 13:02:38 | [diff] [blame] | 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; |
| Nguyễn Thái Ngọc Duy | beea415 | 2013-12-05 13:02:39 | [diff] [blame] | 40 | unsigned cloning:1; |
| Nguyễn Thái Ngọc Duy | 48d25ca | 2013-12-05 13:02:42 | [diff] [blame] | 41 | unsigned update_shallow:1; |
| Nguyễn Thái Ngọc Duy | 79891cb | 2016-06-12 10:53:56 | [diff] [blame] | 42 | unsigned deepen:1; |
| Jonathan Tan | 88e2f9e | 2017-12-05 16:58:49 | [diff] [blame] | 43 | unsigned from_promisor:1; |
| 44 | |
| 45 | /* |
| Jonathan Tan | 4c7f956 | 2018-10-03 23:04:53 | [diff] [blame] | 46 | * Attempt to fetch only the wanted objects, and not any objects |
| 47 | * referred to by them. Due to protocol limitations, extraneous |
| 48 | * objects may still be included. (When fetching non-blob |
| 49 | * objects, only blobs are excluded; when fetching a blob, the |
| 50 | * blob itself will still be sent. The client does not need to |
| 51 | * know whether a wanted object is a blob or not.) |
| 52 | * |
| Jonathan Tan | 88e2f9e | 2017-12-05 16:58:49 | [diff] [blame] | 53 | * If 1, fetch_pack() will also not modify any object flags. |
| 54 | * This allows fetch_pack() to safely be called by any function, |
| 55 | * regardless of which object flags it uses (if any). |
| 56 | */ |
| 57 | unsigned no_dependents:1; |
| Jonathan Tan | cf1e7c0 | 2018-07-02 22:08:43 | [diff] [blame] | 58 | |
| 59 | /* |
| 60 | * Because fetch_pack() overwrites the shallow file upon a |
| 61 | * successful deepening non-clone fetch, if this struct |
| 62 | * specifies such a fetch, fetch_pack() needs to perform a |
| 63 | * connectivity check before deciding if a fetch is successful |
| 64 | * (and overwriting the shallow file). fetch_pack() sets this |
| 65 | * field to 1 if such a connectivity check was performed. |
| 66 | * |
| 67 | * This is different from check_self_contained_and_connected |
| 68 | * in that the former allows existing objects in the |
| 69 | * repository to satisfy connectivity needs, whereas the |
| 70 | * latter doesn't. |
| 71 | */ |
| 72 | unsigned connectivity_checked:1; |
| Daniel Barkalow | 2d4177c | 2007-09-11 03:03:00 | [diff] [blame] | 73 | }; |
| 74 | |
| Michael Haggerty | 4ba1599 | 2012-09-09 06:19:43 | [diff] [blame] | 75 | /* |
| Junio C Hamano | f2db854 | 2013-01-29 22:02:15 | [diff] [blame] | 76 | * sought represents remote references that should be updated from. |
| 77 | * On return, the names that were found on the remote will have been |
| 78 | * marked as such. |
| Michael Haggerty | 4ba1599 | 2012-09-09 06:19:43 | [diff] [blame] | 79 | */ |
| Shawn O. Pearce | fa74052 | 2007-09-19 04:49:35 | [diff] [blame] | 80 | struct ref *fetch_pack(struct fetch_pack_args *args, |
| Michael Haggerty | 63c6945 | 2012-09-09 06:19:39 | [diff] [blame] | 81 | int fd[], struct child_process *conn, |
| 82 | const struct ref *ref, |
| 83 | const char *dest, |
| Junio C Hamano | f2db854 | 2013-01-29 22:02:15 | [diff] [blame] | 84 | struct ref **sought, |
| 85 | int nr_sought, |
| brian m. carlson | 910650d | 2017-03-31 01:40:00 | [diff] [blame] | 86 | struct oid_array *shallow, |
| Brandon Williams | 685fbd3 | 2018-03-15 17:31:28 | [diff] [blame] | 87 | char **pack_lockfile, |
| 88 | enum protocol_version version); |
| Daniel Barkalow | 2d4177c | 2007-09-11 03:03:00 | [diff] [blame] | 89 | |
| Matt McCutchen | e860d96 | 2017-02-22 16:01:22 | [diff] [blame] | 90 | /* |
| 91 | * Print an appropriate error message for each sought ref that wasn't |
| 92 | * matched. Return 0 if all sought refs were matched, otherwise 1. |
| 93 | */ |
| 94 | int report_unmatched_refs(struct ref **sought, int nr_sought); |
| 95 | |
| Daniel Barkalow | 2d4177c | 2007-09-11 03:03:00 | [diff] [blame] | 96 | #endif |