#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 */