Taylor Blau | 120ad2b | 2020-04-30 13:48:50 -0600 | [diff] [blame] | 1 | #ifndef SHALLOW_H |
| 2 | #define SHALLOW_H |
| 3 | |
| 4 | #include "lockfile.h" |
| 5 | #include "object.h" |
| 6 | #include "repository.h" |
| 7 | #include "strbuf.h" |
| 8 | |
| 9 | void set_alternate_shallow_file(struct repository *r, const char *path, int override); |
| 10 | int register_shallow(struct repository *r, const struct object_id *oid); |
| 11 | int unregister_shallow(const struct object_id *oid); |
| 12 | int is_repository_shallow(struct repository *r); |
Taylor Blau | cac4b8e | 2020-04-30 13:48:57 -0600 | [diff] [blame] | 13 | |
| 14 | /* |
| 15 | * Lock for updating the $GIT_DIR/shallow file. |
| 16 | * |
| 17 | * Use `commit_shallow_file()` to commit an update, or |
| 18 | * `rollback_shallow_file()` to roll it back. In either case, any |
| 19 | * in-memory cached information about which commits are shallow will be |
| 20 | * appropriately invalidated so that future operations reflect the new |
| 21 | * state. |
| 22 | */ |
| 23 | struct shallow_lock { |
| 24 | struct lock_file lock; |
| 25 | }; |
| 26 | #define SHALLOW_LOCK_INIT { LOCK_INIT } |
| 27 | |
Taylor Blau | a410161 | 2020-04-30 13:48:54 -0600 | [diff] [blame] | 28 | /* commit $GIT_DIR/shallow and reset stat-validity checks */ |
Taylor Blau | cac4b8e | 2020-04-30 13:48:57 -0600 | [diff] [blame] | 29 | int commit_shallow_file(struct repository *r, struct shallow_lock *lk); |
Taylor Blau | a410161 | 2020-04-30 13:48:54 -0600 | [diff] [blame] | 30 | /* rollback $GIT_DIR/shallow and reset stat-validity checks */ |
Taylor Blau | cac4b8e | 2020-04-30 13:48:57 -0600 | [diff] [blame] | 31 | void rollback_shallow_file(struct repository *r, struct shallow_lock *lk); |
Taylor Blau | 120ad2b | 2020-04-30 13:48:50 -0600 | [diff] [blame] | 32 | |
| 33 | struct commit_list *get_shallow_commits(struct object_array *heads, |
| 34 | int depth, int shallow_flag, int not_shallow_flag); |
| 35 | struct commit_list *get_shallow_commits_by_rev_list( |
| 36 | int ac, const char **av, int shallow_flag, int not_shallow_flag); |
| 37 | int write_shallow_commits(struct strbuf *out, int use_pack_protocol, |
| 38 | const struct oid_array *extra); |
| 39 | |
Taylor Blau | cac4b8e | 2020-04-30 13:48:57 -0600 | [diff] [blame] | 40 | void setup_alternate_shallow(struct shallow_lock *shallow_lock, |
Taylor Blau | 120ad2b | 2020-04-30 13:48:50 -0600 | [diff] [blame] | 41 | const char **alternate_shallow_file, |
| 42 | const struct oid_array *extra); |
| 43 | |
| 44 | const char *setup_temporary_shallow(const struct oid_array *extra); |
| 45 | |
| 46 | void advertise_shallow_grafts(int); |
| 47 | |
| 48 | #define PRUNE_SHOW_ONLY 1 |
| 49 | #define PRUNE_QUICK 2 |
| 50 | void prune_shallow(unsigned options); |
| 51 | |
| 52 | /* |
| 53 | * Initialize with prepare_shallow_info() or zero-initialize (equivalent to |
| 54 | * prepare_shallow_info with a NULL oid_array). |
| 55 | */ |
| 56 | struct shallow_info { |
| 57 | struct oid_array *shallow; |
| 58 | int *ours, nr_ours; |
| 59 | int *theirs, nr_theirs; |
| 60 | struct oid_array *ref; |
| 61 | |
| 62 | /* for receive-pack */ |
| 63 | uint32_t **used_shallow; |
| 64 | int *need_reachability_test; |
| 65 | int *reachable; |
| 66 | int *shallow_ref; |
| 67 | struct commit **commits; |
| 68 | int nr_commits; |
| 69 | }; |
| 70 | |
| 71 | void prepare_shallow_info(struct shallow_info *, struct oid_array *); |
| 72 | void clear_shallow_info(struct shallow_info *); |
| 73 | void remove_nonexistent_theirs_shallow(struct shallow_info *); |
| 74 | void assign_shallow_commits_to_refs(struct shallow_info *info, |
| 75 | uint32_t **used, |
| 76 | int *ref_status); |
| 77 | int delayed_reachability_test(struct shallow_info *si, int c); |
| 78 | |
| 79 | extern struct trace_key trace_shallow; |
| 80 | |
| 81 | #endif /* SHALLOW_H */ |