1#ifndef COMMIT_GRAPH_H 2#define COMMIT_GRAPH_H 3 4#include"git-compat-util.h" 5#include"repository.h" 6#include"string-list.h" 7#include"cache.h" 8 9#define GIT_TEST_COMMIT_GRAPH"GIT_TEST_COMMIT_GRAPH" 10 11struct commit; 12 13char*get_commit_graph_filename(const char*obj_dir); 14 15/* 16 * Given a commit struct, try to fill the commit struct info, including: 17 * 1. tree object 18 * 2. date 19 * 3. parents. 20 * 21 * Returns 1 if and only if the commit was found in the packed graph. 22 * 23 * See parse_commit_buffer() for the fallback after this call. 24 */ 25intparse_commit_in_graph(struct repository *r,struct commit *item); 26 27/* 28 * It is possible that we loaded commit contents from the commit buffer, 29 * but we also want to ensure the commit-graph content is correctly 30 * checked and filled. Fill the graph_pos and generation members of 31 * the given commit. 32 */ 33voidload_commit_graph_info(struct repository *r,struct commit *item); 34 35struct tree *get_commit_tree_in_graph(struct repository *r, 36const struct commit *c); 37 38struct commit_graph { 39int graph_fd; 40 41const unsigned char*data; 42size_t data_len; 43 44unsigned char hash_len; 45unsigned char num_chunks; 46uint32_t num_commits; 47struct object_id oid; 48 49const uint32_t*chunk_oid_fanout; 50const unsigned char*chunk_oid_lookup; 51const unsigned char*chunk_commit_data; 52const unsigned char*chunk_large_edges; 53}; 54 55struct commit_graph *load_commit_graph_one(const char*graph_file); 56 57/* 58 * Return 1 if and only if the repository has a commit-graph 59 * file and generation numbers are computed in that file. 60 */ 61intgeneration_numbers_enabled(struct repository *r); 62 63voidwrite_commit_graph_reachable(const char*obj_dir,int append); 64voidwrite_commit_graph(const char*obj_dir, 65struct string_list *pack_indexes, 66struct string_list *commit_hex, 67int append); 68 69intverify_commit_graph(struct repository *r,struct commit_graph *g); 70 71voidfree_commit_graph(struct commit_graph *); 72 73#endif