| #ifndef SHALLOW_H |
| #define SHALLOW_H |
| |
| #include "lockfile.h" |
| #include "object.h" |
| #include "repository.h" |
| #include "strbuf.h" |
| |
| void set_alternate_shallow_file(struct repository *r, const char *path, int override); |
| int register_shallow(struct repository *r, const struct object_id *oid); |
| int unregister_shallow(const struct object_id *oid); |
| int is_repository_shallow(struct repository *r); |
| |
| /* |
| * Lock for updating the $GIT_DIR/shallow file. |
| * |
| * Use `commit_shallow_file()` to commit an update, or |
| * `rollback_shallow_file()` to roll it back. In either case, any |
| * in-memory cached information about which commits are shallow will be |
| * appropriately invalidated so that future operations reflect the new |
| * state. |
| */ |
| struct shallow_lock { |
| struct lock_file lock; |
| }; |
| #define SHALLOW_LOCK_INIT { \ |
| .lock = LOCK_INIT, \ |
| } |
| |
| /* commit $GIT_DIR/shallow and reset stat-validity checks */ |
| int commit_shallow_file(struct repository *r, struct shallow_lock *lk); |
| /* rollback $GIT_DIR/shallow and reset stat-validity checks */ |
| void rollback_shallow_file(struct repository *r, struct shallow_lock *lk); |
| |
| struct commit_list *get_shallow_commits(struct object_array *heads, |
| int depth, int shallow_flag, int not_shallow_flag); |
| struct commit_list *get_shallow_commits_by_rev_list( |
| int ac, const char **av, int shallow_flag, int not_shallow_flag); |
| int write_shallow_commits(struct strbuf *out, int use_pack_protocol, |
| const struct oid_array *extra); |
| |
| void setup_alternate_shallow(struct shallow_lock *shallow_lock, |
| const char **alternate_shallow_file, |
| const struct oid_array *extra); |
| |
| const char *setup_temporary_shallow(const struct oid_array *extra); |
| |
| void advertise_shallow_grafts(int); |
| |
| #define PRUNE_SHOW_ONLY 1 |
| #define PRUNE_QUICK 2 |
| void prune_shallow(unsigned options); |
| |
| /* |
| * Initialize with prepare_shallow_info() or zero-initialize (equivalent to |
| * prepare_shallow_info with a NULL oid_array). |
| */ |
| struct shallow_info { |
| struct oid_array *shallow; |
| int *ours, nr_ours; |
| int *theirs, nr_theirs; |
| struct oid_array *ref; |
| |
| /* for receive-pack */ |
| uint32_t **used_shallow; |
| int *need_reachability_test; |
| int *reachable; |
| int *shallow_ref; |
| struct commit **commits; |
| int nr_commits; |
| }; |
| |
| void prepare_shallow_info(struct shallow_info *, struct oid_array *); |
| void clear_shallow_info(struct shallow_info *); |
| void remove_nonexistent_theirs_shallow(struct shallow_info *); |
| void assign_shallow_commits_to_refs(struct shallow_info *info, |
| uint32_t **used, |
| int *ref_status); |
| int delayed_reachability_test(struct shallow_info *si, int c); |
| |
| extern struct trace_key trace_shallow; |
| |
| #endif /* SHALLOW_H */ |