summaryrefslogtreecommitdiff
path: root/commit-graph.h
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <gitster@pobox.com>2019-07-19 11:30:20 -0700
committerLibravatar Junio C Hamano <gitster@pobox.com>2019-07-19 11:30:20 -0700
commit92b1ea66b9a8f012a343ebc157c3441154e831f0 (patch)
tree7e1888fe1701819fb8130bce911c27b3ae6cd02c /commit-graph.h
parentMerge branch 'br/blame-ignore' (diff)
parentcommit-graph: test verify across alternates (diff)
downloadtgif-92b1ea66b9a8f012a343ebc157c3441154e831f0.tar.xz
Merge branch 'ds/commit-graph-incremental'
The commits in a repository can be described by multiple commit-graph files now, which allows the commit-graph files to be updated incrementally. * ds/commit-graph-incremental: commit-graph: test verify across alternates commit-graph: normalize commit-graph filenames commit-graph: test --split across alternate without --split commit-graph: test octopus merges with --split commit-graph: clean up chains after flattened write commit-graph: verify chains with --shallow mode commit-graph: create options for split files commit-graph: expire commit-graph files commit-graph: allow cross-alternate chains commit-graph: merge commit-graph chains commit-graph: add --split option to builtin commit-graph: write commit-graph chains commit-graph: rearrange chunk count logic commit-graph: add base graphs chunk commit-graph: load commit-graph chains commit-graph: rename commit_compare to oid_compare commit-graph: prepare for commit-graph chains commit-graph: document commit-graph chains
Diffstat (limited to 'commit-graph.h')
-rw-r--r--commit-graph.h25
1 files changed, 21 insertions, 4 deletions
diff --git a/commit-graph.h b/commit-graph.h
index 390c7f6961..df9a3b20e4 100644
--- a/commit-graph.h
+++ b/commit-graph.h
@@ -47,15 +47,21 @@ struct commit_graph {
unsigned char num_chunks;
uint32_t num_commits;
struct object_id oid;
+ char *filename;
+ const char *obj_dir;
+
+ uint32_t num_commits_in_base;
+ struct commit_graph *base_graph;
const uint32_t *chunk_oid_fanout;
const unsigned char *chunk_oid_lookup;
const unsigned char *chunk_commit_data;
const unsigned char *chunk_extra_edges;
+ const unsigned char *chunk_base_graphs;
};
struct commit_graph *load_commit_graph_one_fd_st(int fd, struct stat *st);
-
+struct commit_graph *read_commit_graph_one(struct repository *r, const char *obj_dir);
struct commit_graph *parse_commit_graph(void *graph_map, int fd,
size_t graph_size);
@@ -67,6 +73,13 @@ int generation_numbers_enabled(struct repository *r);
#define COMMIT_GRAPH_APPEND (1 << 0)
#define COMMIT_GRAPH_PROGRESS (1 << 1)
+#define COMMIT_GRAPH_SPLIT (1 << 2)
+
+struct split_commit_graph_opts {
+ int size_multiple;
+ int max_commits;
+ timestamp_t expire_time;
+};
/*
* The write_commit_graph* methods return zero on success
@@ -74,13 +87,17 @@ int generation_numbers_enabled(struct repository *r);
* is not compatible with the commit-graph feature, then the
* methods will return 0 without writing a commit-graph.
*/
-int write_commit_graph_reachable(const char *obj_dir, unsigned int flags);
+int write_commit_graph_reachable(const char *obj_dir, unsigned int flags,
+ const struct split_commit_graph_opts *split_opts);
int write_commit_graph(const char *obj_dir,
struct string_list *pack_indexes,
struct string_list *commit_hex,
- unsigned int flags);
+ unsigned int flags,
+ const struct split_commit_graph_opts *split_opts);
+
+#define COMMIT_GRAPH_VERIFY_SHALLOW (1 << 0)
-int verify_commit_graph(struct repository *r, struct commit_graph *g);
+int verify_commit_graph(struct repository *r, struct commit_graph *g, int flags);
void close_commit_graph(struct raw_object_store *);
void free_commit_graph(struct commit_graph *);