aboutsummaryrefslogtreecommitdiffstats
path: root/plumbing
diff options
context:
space:
mode:
authorFilip Navara <filip.navara@gmail.com>2019-04-29 13:23:06 +0200
committerFilip Navara <filip.navara@gmail.com>2019-04-29 13:23:06 +0200
commit5f53b23103a04f97220f325772646b603c4dc25f (patch)
treebf25112c1a1ad5579ae1ea85d91e129b8138a2b4 /plumbing
parenta47126b1ae5020dbdd268b304fef45a59d63d99b (diff)
downloadgo-git-5f53b23103a04f97220f325772646b603c4dc25f.tar.gz
Expose Generation property on CommitNode
Signed-off-by: Filip Navara <filip.navara@gmail.com>
Diffstat (limited to 'plumbing')
-rw-r--r--plumbing/object/commitnode.go3
-rw-r--r--plumbing/object/commitnode_graph.go7
-rw-r--r--plumbing/object/commitnode_object.go8
3 files changed, 18 insertions, 0 deletions
diff --git a/plumbing/object/commitnode.go b/plumbing/object/commitnode.go
index 22927f4..ce25487 100644
--- a/plumbing/object/commitnode.go
+++ b/plumbing/object/commitnode.go
@@ -25,6 +25,9 @@ type CommitNode interface {
ParentNode(i int) (CommitNode, error)
// ParentHashes returns hashes of the parent commits for a specified node
ParentHashes() []plumbing.Hash
+ // Generation returns the generation of the commit for reachability analysis.
+ // Objects with newer generation are not reachable from objects of older generation.
+ Generation() uint64
// Commit returns the full commit object from the node
Commit() (*Commit, error)
}
diff --git a/plumbing/object/commitnode_graph.go b/plumbing/object/commitnode_graph.go
index b2a6f57..ac790ab 100644
--- a/plumbing/object/commitnode_graph.go
+++ b/plumbing/object/commitnode_graph.go
@@ -110,6 +110,13 @@ func (c *graphCommitNode) ParentHashes() []plumbing.Hash {
return c.commitData.ParentHashes
}
+func (c *graphCommitNode) Generation() uint64 {
+ // If the commit-graph file was generated with older Git version that
+ // set the generation to zero for every commit the generation assumption
+ // is still valid. It is just less useful.
+ return uint64(c.commitData.Generation)
+}
+
func (c *graphCommitNode) Commit() (*Commit, error) {
return GetCommit(c.gci.s, c.hash)
}
diff --git a/plumbing/object/commitnode_object.go b/plumbing/object/commitnode_object.go
index 52316f8..9ac42d2 100644
--- a/plumbing/object/commitnode_object.go
+++ b/plumbing/object/commitnode_object.go
@@ -1,6 +1,7 @@
package object
import (
+ "math"
"time"
"gopkg.in/src-d/go-git.v4/plumbing"
@@ -76,6 +77,13 @@ func (c *objectCommitNode) ParentHashes() []plumbing.Hash {
return c.commit.ParentHashes
}
+func (c *objectCommitNode) Generation() uint64 {
+ // Commit nodes representing objects outside of the commit graph can never
+ // be reached by objects from the commit-graph thus we return the highest
+ // possible value.
+ return math.MaxUint64
+}
+
func (c *objectCommitNode) Commit() (*Commit, error) {
return c.commit, nil
}