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