mirror of
https://gitcode.com/gitea/gitea.git
synced 2025-06-17 10:26:25 +08:00
Use commit graph files for listing pages (#7314)
* Experimental support for git commit graph files and bloom filter index Signed-off-by: Filip Navara <filip.navara@gmail.com> * Force vendor of commitgraph Signed-off-by: Filip Navara <filip.navara@gmail.com> * Remove bloom filter experiment and debug prints * Remove old code for building commit graphs * Remove unused function * Remove mmap usage * gofmt * sort vendor/modules.txt * Add copyright header and log commit-graph error
This commit is contained in:
98
vendor/gopkg.in/src-d/go-git.v4/plumbing/object/commitgraph/commitnode.go
generated
vendored
Normal file
98
vendor/gopkg.in/src-d/go-git.v4/plumbing/object/commitgraph/commitnode.go
generated
vendored
Normal file
@ -0,0 +1,98 @@
|
||||
package commitgraph
|
||||
|
||||
import (
|
||||
"io"
|
||||
"time"
|
||||
|
||||
"gopkg.in/src-d/go-git.v4/plumbing"
|
||||
"gopkg.in/src-d/go-git.v4/plumbing/object"
|
||||
"gopkg.in/src-d/go-git.v4/plumbing/storer"
|
||||
)
|
||||
|
||||
// CommitNode is generic interface encapsulating a lightweight commit object retrieved
|
||||
// from CommitNodeIndex
|
||||
type CommitNode interface {
|
||||
// ID returns the Commit object id referenced by the commit graph node.
|
||||
ID() plumbing.Hash
|
||||
// Tree returns the Tree referenced by the commit graph node.
|
||||
Tree() (*object.Tree, error)
|
||||
// CommitTime returns the Commiter.When time of the Commit referenced by the commit graph node.
|
||||
CommitTime() time.Time
|
||||
// NumParents returns the number of parents in a commit.
|
||||
NumParents() int
|
||||
// ParentNodes return a CommitNodeIter for parents of specified node.
|
||||
ParentNodes() CommitNodeIter
|
||||
// ParentNode returns the ith parent of a commit.
|
||||
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() (*object.Commit, error)
|
||||
}
|
||||
|
||||
// CommitNodeIndex is generic interface encapsulating an index of CommitNode objects
|
||||
type CommitNodeIndex interface {
|
||||
// Get returns a commit node from a commit hash
|
||||
Get(hash plumbing.Hash) (CommitNode, error)
|
||||
}
|
||||
|
||||
// CommitNodeIter is a generic closable interface for iterating over commit nodes.
|
||||
type CommitNodeIter interface {
|
||||
Next() (CommitNode, error)
|
||||
ForEach(func(CommitNode) error) error
|
||||
Close()
|
||||
}
|
||||
|
||||
// parentCommitNodeIter provides an iterator for parent commits from associated CommitNodeIndex.
|
||||
type parentCommitNodeIter struct {
|
||||
node CommitNode
|
||||
i int
|
||||
}
|
||||
|
||||
func newParentgraphCommitNodeIter(node CommitNode) CommitNodeIter {
|
||||
return &parentCommitNodeIter{node, 0}
|
||||
}
|
||||
|
||||
// Next moves the iterator to the next commit and returns a pointer to it. If
|
||||
// there are no more commits, it returns io.EOF.
|
||||
func (iter *parentCommitNodeIter) Next() (CommitNode, error) {
|
||||
obj, err := iter.node.ParentNode(iter.i)
|
||||
if err == object.ErrParentNotFound {
|
||||
return nil, io.EOF
|
||||
}
|
||||
if err == nil {
|
||||
iter.i++
|
||||
}
|
||||
|
||||
return obj, err
|
||||
}
|
||||
|
||||
// ForEach call the cb function for each commit contained on this iter until
|
||||
// an error appends or the end of the iter is reached. If ErrStop is sent
|
||||
// the iteration is stopped but no error is returned. The iterator is closed.
|
||||
func (iter *parentCommitNodeIter) ForEach(cb func(CommitNode) error) error {
|
||||
for {
|
||||
obj, err := iter.Next()
|
||||
if err != nil {
|
||||
if err == io.EOF {
|
||||
return nil
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
if err := cb(obj); err != nil {
|
||||
if err == storer.ErrStop {
|
||||
return nil
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (iter *parentCommitNodeIter) Close() {
|
||||
}
|
Reference in New Issue
Block a user