aboutsummaryrefslogtreecommitdiffstats
path: root/plumbing/format/commitgraph/commitgraph.go
diff options
context:
space:
mode:
authorFilip Navara <filip.navara@gmail.com>2019-04-22 12:03:01 +0200
committerFilip Navara <filip.navara@gmail.com>2019-04-24 09:40:06 +0200
commit565d0b13ea802b61352f992bf1058f0f984aa528 (patch)
treed707ea0f9a9bc1be7833b3bd41fbbd5f488bc776 /plumbing/format/commitgraph/commitgraph.go
parent364866fc77fac656e103c1048dd7da4764c6d9d9 (diff)
downloadgo-git-565d0b13ea802b61352f992bf1058f0f984aa528.tar.gz
plumbing: format/commitgraph, add APIs for reading and writing commit-graph files
Signed-off-by: Filip Navara <filip.navara@gmail.com>
Diffstat (limited to 'plumbing/format/commitgraph/commitgraph.go')
-rw-r--r--plumbing/format/commitgraph/commitgraph.go35
1 files changed, 35 insertions, 0 deletions
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
+}