Fast implementation of Git in pure Go
at master 45 lines 939 B view raw
1package read 2 3import ( 4 "iter" 5 6 "codeberg.org/lindenii/furgit/internal/intconv" 7 "codeberg.org/lindenii/furgit/objectid" 8) 9 10// AllPositions iterates all commit positions in native layer order. 11func (reader *Reader) AllPositions() iter.Seq[Position] { 12 return func(yield func(Position) bool) { 13 for layerIdx := range reader.layers { 14 layer := &reader.layers[layerIdx] 15 16 graph, err := intconv.IntToUint32(layerIdx) 17 if err != nil { 18 return 19 } 20 21 for idx := range layer.numCommits { 22 if !yield(Position{Graph: graph, Index: idx}) { 23 return 24 } 25 } 26 } 27 } 28} 29 30// AllOIDs iterates all commit object IDs in native layer order. 31func (reader *Reader) AllOIDs() iter.Seq[objectid.ObjectID] { 32 return func(yield func(objectid.ObjectID) bool) { 33 positions := reader.AllPositions() 34 for pos := range positions { 35 oid, err := reader.OIDAt(pos) 36 if err != nil { 37 return 38 } 39 40 if !yield(oid) { 41 return 42 } 43 } 44 } 45}