Fast implementation of Git in pure Go
codeberg.org/lindenii/furgit
git
go
1package commitquery
2
3import commitgraphread "codeberg.org/lindenii/furgit/format/commitgraph/read"
4
5// loadCommitAtGraphPos populates one node from one commit-graph record.
6func (query *query) loadCommitAtGraphPos(idx nodeIndex, pos commitgraphread.Position) error {
7 commit, err := query.graph.CommitAt(pos)
8 if err != nil {
9 return err
10 }
11
12 parents := make([]parentRef, 0, 2+len(commit.ExtraParents))
13
14 if commit.Parent1.Valid {
15 parentOID, err := query.graph.OIDAt(commit.Parent1.Pos)
16 if err != nil {
17 return err
18 }
19
20 parents = append(parents, parentRef{
21 ID: parentOID,
22 GraphPos: commit.Parent1.Pos,
23 HasGraphPos: true,
24 })
25 }
26
27 if commit.Parent2.Valid {
28 parentOID, err := query.graph.OIDAt(commit.Parent2.Pos)
29 if err != nil {
30 return err
31 }
32
33 parents = append(parents, parentRef{
34 ID: parentOID,
35 GraphPos: commit.Parent2.Pos,
36 HasGraphPos: true,
37 })
38 }
39
40 for _, parentPos := range commit.ExtraParents {
41 parentOID, err := query.graph.OIDAt(parentPos)
42 if err != nil {
43 return err
44 }
45
46 parents = append(parents, parentRef{
47 ID: parentOID,
48 GraphPos: parentPos,
49 HasGraphPos: true,
50 })
51 }
52
53 data := commitData{
54 ID: commit.OID,
55 Parents: parents,
56 CommitTime: commit.CommitTimeUnix,
57 Generation: commit.GenerationV2,
58 HasGeneration: commit.GenerationV2 != 0,
59 GraphPos: pos,
60 HasGraphPos: true,
61 }
62
63 return query.populateNode(idx, data)
64}