Fast implementation of Git in pure Go
at master 34 lines 930 B view raw
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}