summaryrefslogtreecommitdiff
path: root/src/commit_graph.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/commit_graph.h')
-rw-r--r--src/commit_graph.h162
1 files changed, 0 insertions, 162 deletions
diff --git a/src/commit_graph.h b/src/commit_graph.h
deleted file mode 100644
index 9d0a827de..000000000
--- a/src/commit_graph.h
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright (C) the libgit2 contributors. All rights reserved.
- *
- * This file is part of libgit2, distributed under the GNU GPL v2 with
- * a Linking Exception. For full terms see the included COPYING file.
- */
-
-#ifndef INCLUDE_commit_graph_h__
-#define INCLUDE_commit_graph_h__
-
-#include "common.h"
-
-#include "git2/types.h"
-#include "git2/sys/commit_graph.h"
-
-#include "map.h"
-#include "vector.h"
-
-/**
- * A commit-graph file.
- *
- * This file contains metadata about commits, particularly the generation
- * number for each one. This can help speed up graph operations without
- * requiring a full graph traversal.
- *
- * Support for this feature was added in git 2.19.
- */
-typedef struct git_commit_graph_file {
- git_map graph_map;
-
- /* The OID Fanout table. */
- const uint32_t *oid_fanout;
- /* The total number of commits in the graph. */
- uint32_t num_commits;
-
- /* The OID Lookup table. */
- git_oid *oid_lookup;
-
- /*
- * The Commit Data table. Each entry contains the OID of the commit followed
- * by two 8-byte fields in network byte order:
- * - The indices of the first two parents (32 bits each).
- * - The generation number (first 30 bits) and commit time in seconds since
- * UNIX epoch (34 bits).
- */
- const unsigned char *commit_data;
-
- /*
- * The Extra Edge List table. Each 4-byte entry is a network byte order index
- * of one of the i-th (i > 0) parents of commits in the `commit_data` table,
- * when the commit has more than 2 parents.
- */
- const unsigned char *extra_edge_list;
- /* The number of entries in the Extra Edge List table. Each entry is 4 bytes wide. */
- size_t num_extra_edge_list;
-
- /* The trailer of the file. Contains the SHA1-checksum of the whole file. */
- git_oid checksum;
-} git_commit_graph_file;
-
-/**
- * An entry in the commit-graph file. Provides a subset of the information that
- * can be obtained from the commit header.
- */
-typedef struct git_commit_graph_entry {
- /* The generation number of the commit within the graph */
- size_t generation;
-
- /* Time in seconds from UNIX epoch. */
- git_time_t commit_time;
-
- /* The number of parents of the commit. */
- size_t parent_count;
-
- /*
- * The indices of the parent commits within the Commit Data table. The value
- * of `GIT_COMMIT_GRAPH_MISSING_PARENT` indicates that no parent is in that
- * position.
- */
- size_t parent_indices[2];
-
- /* The index within the Extra Edge List of any parent after the first two. */
- size_t extra_parents_index;
-
- /* The SHA-1 hash of the root tree of the commit. */
- git_oid tree_oid;
-
- /* The SHA-1 hash of the requested commit. */
- git_oid sha1;
-} git_commit_graph_entry;
-
-/* A wrapper for git_commit_graph_file to enable lazy loading in the ODB. */
-struct git_commit_graph {
- /* The path to the commit-graph file. Something like ".git/objects/info/commit-graph". */
- git_buf filename;
-
- /* The underlying commit-graph file. */
- git_commit_graph_file *file;
-
- /* Whether the commit-graph file was already checked for validity. */
- bool checked;
-};
-
-/** Create a new commit-graph, optionally opening the underlying file. */
-int git_commit_graph_new(git_commit_graph **cgraph_out, const char *objects_dir, bool open_file);
-
-/** Open and validate a commit-graph file. */
-int git_commit_graph_file_open(git_commit_graph_file **file_out, const char *path);
-
-/*
- * Attempt to get the git_commit_graph's commit-graph file. This object is
- * still owned by the git_commit_graph. If the repository does not contain a commit graph,
- * it will return GIT_ENOTFOUND.
- *
- * This function is not thread-safe.
- */
-int git_commit_graph_get_file(git_commit_graph_file **file_out, git_commit_graph *cgraph);
-
-/* Marks the commit-graph file as needing a refresh. */
-void git_commit_graph_refresh(git_commit_graph *cgraph);
-
-/*
- * A writer for `commit-graph` files.
- */
-struct git_commit_graph_writer {
- /*
- * The path of the `objects/info` directory where the `commit-graph` will be
- * stored.
- */
- git_buf objects_info_dir;
-
- /* The list of packed commits. */
- git_vector commits;
-};
-
-/*
- * Returns whether the git_commit_graph_file needs to be reloaded since the
- * contents of the commit-graph file have changed on disk.
- */
-bool git_commit_graph_file_needs_refresh(
- const git_commit_graph_file *file, const char *path);
-
-int git_commit_graph_entry_find(
- git_commit_graph_entry *e,
- const git_commit_graph_file *file,
- const git_oid *short_oid,
- size_t len);
-int git_commit_graph_entry_parent(
- git_commit_graph_entry *parent,
- const git_commit_graph_file *file,
- const git_commit_graph_entry *entry,
- size_t n);
-int git_commit_graph_file_close(git_commit_graph_file *cgraph);
-void git_commit_graph_file_free(git_commit_graph_file *cgraph);
-
-/* This is exposed for use in the fuzzers. */
-int git_commit_graph_file_parse(
- git_commit_graph_file *file,
- const unsigned char *data,
- size_t size);
-
-#endif