From 565d0b13ea802b61352f992bf1058f0f984aa528 Mon Sep 17 00:00:00 2001 From: Filip Navara Date: Mon, 22 Apr 2019 12:03:01 +0200 Subject: plumbing: format/commitgraph, add APIs for reading and writing commit-graph files Signed-off-by: Filip Navara --- plumbing/format/commitgraph/commitgraph.go | 35 ++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 plumbing/format/commitgraph/commitgraph.go (limited to 'plumbing/format/commitgraph/commitgraph.go') diff --git a/plumbing/format/commitgraph/commitgraph.go b/plumbing/format/commitgraph/commitgraph.go new file mode 100644 index 0000000..9bf7149 --- /dev/null +++ b/plumbing/format/commitgraph/commitgraph.go @@ -0,0 +1,35 @@ +package commitgraph + +import ( + "time" + + "gopkg.in/src-d/go-git.v4/plumbing" +) + +// Node is a reduced representation of Commit as presented in the commit graph +// file. It is merely useful as an optimization for walking the commit graphs. +type Node struct { + // TreeHash is the hash of the root tree of the commit. + TreeHash plumbing.Hash + // ParentIndexes are the indexes of the parent commits of the commit. + ParentIndexes []int + // ParentHashes are the hashes of the parent commits of the commit. + ParentHashes []plumbing.Hash + // Generation number is the pre-computed generation in the commit graph + // or zero if not available + Generation int + // When is the timestamp of the commit. + When time.Time +} + +// Index represents a representation of commit graph that allows indexed +// access to the nodes using commit object hash +type Index interface { + // GetIndexByHash gets the index in the commit graph from commit hash, if available + GetIndexByHash(h plumbing.Hash) (int, error) + // GetNodeByIndex gets the commit node from the commit graph using index + // obtained from child node, if available + GetNodeByIndex(i int) (*Node, error) + // Hashes returns all the hashes that are available in the index + Hashes() []plumbing.Hash +} -- cgit