Fast implementation of Git in pure Go
1// Package commitquery answers commit ancestry and merge-base queries.
2package commitquery
3
4import (
5 commitgraphread "codeberg.org/lindenii/furgit/commitgraph/read"
6 "codeberg.org/lindenii/furgit/objectid"
7 "codeberg.org/lindenii/furgit/objectstore"
8)
9
10// Query owns the mutable node arena for commit-domain queries over one object
11// store.
12type Query struct {
13 store objectstore.Store
14 graph *commitgraphread.Reader
15
16 nodes []node
17
18 byOID map[objectid.ObjectID]nodeIndex
19 byGraphPos map[commitgraphread.Position]nodeIndex
20
21 markPhase uint32
22 touched []nodeIndex
23}
24
25// New builds one reusable commit query arena over one object store and optional
26// commit-graph reader.
27func New(store objectstore.Store, graph *commitgraphread.Reader) *Query {
28 return &Query{
29 store: store,
30 graph: graph,
31 byOID: make(map[objectid.ObjectID]nodeIndex),
32 byGraphPos: make(map[commitgraphread.Position]nodeIndex),
33 }
34}