aboutsummaryrefslogtreecommitdiffstats
path: root/plumbing/format/commitgraph/v2/memory.go
diff options
context:
space:
mode:
authorPaulo Gomes <pjbgf@linux.com>2023-10-13 23:06:19 +0100
committerGitHub <noreply@github.com>2023-10-13 23:06:19 +0100
commit72ce9961c676b73c9bdd0678b64af7b0a42253f8 (patch)
tree3e6c8e7b0706918455a2d85fe6629242acab163f /plumbing/format/commitgraph/v2/memory.go
parent24261e8288b2483628d69c751dd310ac79c38b2e (diff)
parent69b88d9bda44ebfe1d56a7624b956d9e20818c0e (diff)
downloadgo-git-72ce9961c676b73c9bdd0678b64af7b0a42253f8.tar.gz
Merge pull request #869 from zeripath/graph-generation-2v5.10.0
plumbing: commitgraph, Add generation v2 support
Diffstat (limited to 'plumbing/format/commitgraph/v2/memory.go')
-rw-r--r--plumbing/format/commitgraph/v2/memory.go22
1 files changed, 19 insertions, 3 deletions
diff --git a/plumbing/format/commitgraph/v2/memory.go b/plumbing/format/commitgraph/v2/memory.go
index ab7ddfa..8de0c5f 100644
--- a/plumbing/format/commitgraph/v2/memory.go
+++ b/plumbing/format/commitgraph/v2/memory.go
@@ -1,14 +1,17 @@
package v2
import (
+ "math"
+
"github.com/go-git/go-git/v5/plumbing"
)
// MemoryIndex provides a way to build the commit-graph in memory
// for later encoding to file.
type MemoryIndex struct {
- commitData []commitData
- indexMap map[plumbing.Hash]uint32
+ commitData []commitData
+ indexMap map[plumbing.Hash]uint32
+ hasGenerationV2 bool
}
type commitData struct {
@@ -19,7 +22,8 @@ type commitData struct {
// NewMemoryIndex creates in-memory commit graph representation
func NewMemoryIndex() *MemoryIndex {
return &MemoryIndex{
- indexMap: make(map[plumbing.Hash]uint32),
+ indexMap: make(map[plumbing.Hash]uint32),
+ hasGenerationV2: true,
}
}
@@ -83,9 +87,21 @@ func (mi *MemoryIndex) Add(hash plumbing.Hash, data *CommitData) {
data.ParentIndexes = nil
mi.indexMap[hash] = uint32(len(mi.commitData))
mi.commitData = append(mi.commitData, commitData{Hash: hash, CommitData: data})
+ if data.GenerationV2 == math.MaxUint64 { // if GenerationV2 is not available reset it to zero
+ data.GenerationV2 = 0
+ }
+ mi.hasGenerationV2 = mi.hasGenerationV2 && data.GenerationV2 != 0
+}
+
+func (mi *MemoryIndex) HasGenerationV2() bool {
+ return mi.hasGenerationV2
}
// Close closes the index
func (mi *MemoryIndex) Close() error {
return nil
}
+
+func (mi *MemoryIndex) MaximumNumberOfHashes() uint32 {
+ return uint32(len(mi.indexMap))
+}