Daniel Barkalow | 2d4177c | 2007-09-10 23:03:00 -0400 | [diff] [blame] | 1 | #ifndef FETCH_PACK_H |
| 2 | #define FETCH_PACK_H |
| 3 | |
Michael Haggerty | 8bee93d | 2012-09-09 08:19:40 +0200 | [diff] [blame] | 4 | #include "string-list.h" |
Junio C Hamano | 47a5918 | 2013-07-08 13:56:53 -0700 | [diff] [blame] | 5 | #include "run-command.h" |
Brandon Williams | 685fbd3 | 2018-03-15 10:31:28 -0700 | [diff] [blame] | 6 | #include "protocol.h" |
Jeff Hostetler | 640d8b7 | 2017-12-08 15:58:40 +0000 | [diff] [blame] | 7 | #include "list-objects-filter-options.h" |
Michael Haggerty | 8bee93d | 2012-09-09 08:19:40 +0200 | [diff] [blame] | 8 | |
brian m. carlson | 910650d | 2017-03-31 01:40:00 +0000 | [diff] [blame] | 9 | struct oid_array; |
Nguyễn Thái Ngọc Duy | beea415 | 2013-12-05 20:02:39 +0700 | [diff] [blame] | 10 | |
Jonathan Nieder | 9cba13c | 2011-03-16 02:08:34 -0500 | [diff] [blame] | 11 | struct fetch_pack_args { |
Daniel Barkalow | 2d4177c | 2007-09-10 23:03:00 -0400 | [diff] [blame] | 12 | const char *uploadpack; |
Daniel Barkalow | 2d4177c | 2007-09-10 23:03:00 -0400 | [diff] [blame] | 13 | int unpacklimit; |
Daniel Barkalow | 2d4177c | 2007-09-10 23:03:00 -0400 | [diff] [blame] | 14 | int depth; |
Nguyễn Thái Ngọc Duy | 508ea88 | 2016-06-12 17:53:59 +0700 | [diff] [blame] | 15 | const char *deepen_since; |
Nguyễn Thái Ngọc Duy | a45a260 | 2016-06-12 17:54:04 +0700 | [diff] [blame] | 16 | const struct string_list *deepen_not; |
Jeff Hostetler | 640d8b7 | 2017-12-08 15:58:40 +0000 | [diff] [blame] | 17 | struct list_objects_filter_options filter_options; |
Brandon Williams | 5e3548e | 2018-04-23 15:46:24 -0700 | [diff] [blame] | 18 | const struct string_list *server_options; |
Jonathan Tan | 3390e42 | 2018-07-02 15:39:44 -0700 | [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 17:54:09 +0700 | [diff] [blame] | 26 | unsigned deepen_relative:1; |
Nguyễn Thái Ngọc Duy | f6486f0 | 2013-12-05 20:02:38 +0700 | [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 12:21:14 -0800 | [diff] [blame] | 33 | unsigned diag_url:1; |
Nguyễn Thái Ngọc Duy | f6486f0 | 2013-12-05 20:02:38 +0700 | [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 20:02:39 +0700 | [diff] [blame] | 40 | unsigned cloning:1; |
Nguyễn Thái Ngọc Duy | 48d25ca | 2013-12-05 20:02:42 +0700 | [diff] [blame] | 41 | unsigned update_shallow:1; |
Nguyễn Thái Ngọc Duy | 79891cb | 2016-06-12 17:53:56 +0700 | [diff] [blame] | 42 | unsigned deepen:1; |
Jonathan Tan | 88e2f9e | 2017-12-05 16:58:49 +0000 | [diff] [blame] | 43 | unsigned from_promisor:1; |
| 44 | |
| 45 | /* |
Jonathan Tan | 4c7f956 | 2018-10-03 16:04:53 -0700 | [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 +0000 | [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 15:08:43 -0700 | [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-10 23:03:00 -0400 | [diff] [blame] | 73 | }; |
| 74 | |
Michael Haggerty | 4ba1599 | 2012-09-09 08:19:43 +0200 | [diff] [blame] | 75 | /* |
Junio C Hamano | f2db854 | 2013-01-29 14:02:15 -0800 | [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 08:19:43 +0200 | [diff] [blame] | 79 | */ |
Shawn O. Pearce | fa74052 | 2007-09-19 00:49:35 -0400 | [diff] [blame] | 80 | struct ref *fetch_pack(struct fetch_pack_args *args, |
Michael Haggerty | 63c6945 | 2012-09-09 08:19:39 +0200 | [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 14:02:15 -0800 | [diff] [blame] | 84 | struct ref **sought, |
| 85 | int nr_sought, |
brian m. carlson | 910650d | 2017-03-31 01:40:00 +0000 | [diff] [blame] | 86 | struct oid_array *shallow, |
Brandon Williams | 685fbd3 | 2018-03-15 10:31:28 -0700 | [diff] [blame] | 87 | char **pack_lockfile, |
| 88 | enum protocol_version version); |
Daniel Barkalow | 2d4177c | 2007-09-10 23:03:00 -0400 | [diff] [blame] | 89 | |
Matt McCutchen | e860d96 | 2017-02-22 11:01:22 -0500 | [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-10 23:03:00 -0400 | [diff] [blame] | 96 | #endif |