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); 14intopen_commit_graph(const char*graph_file,int*fd,struct stat *st); 15 16/* 17 * Given a commit struct, try to fill the commit struct info, including: 18 * 1. tree object 19 * 2. date 20 * 3. parents. 21 * 22 * Returns 1 if and only if the commit was found in the packed graph. 23 * 24 * See parse_commit_buffer() for the fallback after this call. 25 */ 26intparse_commit_in_graph(struct repository *r,struct commit *item); 27 28/* 29 * It is possible that we loaded commit contents from the commit buffer, 30 * but we also want to ensure the commit-graph content is correctly 31 * checked and filled. Fill the graph_pos and generation members of 32 * the given commit. 33 */ 34voidload_commit_graph_info(struct repository *r,struct commit *item); 35 36struct tree *get_commit_tree_in_graph(struct repository *r, 37const struct commit *c); 38 39struct commit_graph { 40int graph_fd; 41 42const unsigned char*data; 43size_t data_len; 44 45unsigned char hash_len; 46unsigned char num_chunks; 47uint32_t num_commits; 48struct object_id oid; 49 50const uint32_t*chunk_oid_fanout; 51const unsigned char*chunk_oid_lookup; 52const unsigned char*chunk_commit_data; 53const unsigned char*chunk_extra_edges; 54}; 55 56struct commit_graph *load_commit_graph_one_fd_st(int fd,struct stat *st); 57 58struct commit_graph *parse_commit_graph(void*graph_map,int fd, 59size_t graph_size); 60 61/* 62 * Return 1 if and only if the repository has a commit-graph 63 * file and generation numbers are computed in that file. 64 */ 65intgeneration_numbers_enabled(struct repository *r); 66 67voidwrite_commit_graph_reachable(const char*obj_dir,int append, 68int report_progress); 69voidwrite_commit_graph(const char*obj_dir, 70struct string_list *pack_indexes, 71struct string_list *commit_hex, 72int append,int report_progress); 73 74intverify_commit_graph(struct repository *r,struct commit_graph *g); 75 76voidclose_commit_graph(struct repository *); 77voidfree_commit_graph(struct commit_graph *); 78 79#endif