aboutsummaryrefslogtreecommitdiff
path: root/commitquery/query_load_commit_at_graph_pos.go
diff options
context:
space:
mode:
Diffstat (limited to 'commitquery/query_load_commit_at_graph_pos.go')
-rw-r--r--commitquery/query_load_commit_at_graph_pos.go64
1 files changed, 64 insertions, 0 deletions
diff --git a/commitquery/query_load_commit_at_graph_pos.go b/commitquery/query_load_commit_at_graph_pos.go
new file mode 100644
index 00000000..f63b6385
--- /dev/null
+++ b/commitquery/query_load_commit_at_graph_pos.go
@@ -0,0 +1,64 @@
+package commitquery
+
+import commitgraphread "codeberg.org/lindenii/furgit/format/commitgraph/read"
+
+// loadCommitAtGraphPos populates one node from one commit-graph record.
+func (query *query) loadCommitAtGraphPos(idx nodeIndex, pos commitgraphread.Position) error {
+ commit, err := query.graph.CommitAt(pos)
+ if err != nil {
+ return err
+ }
+
+ parents := make([]parentRef, 0, 2+len(commit.ExtraParents))
+
+ if commit.Parent1.Valid {
+ parentOID, err := query.graph.OIDAt(commit.Parent1.Pos)
+ if err != nil {
+ return err
+ }
+
+ parents = append(parents, parentRef{
+ ID: parentOID,
+ GraphPos: commit.Parent1.Pos,
+ HasGraphPos: true,
+ })
+ }
+
+ if commit.Parent2.Valid {
+ parentOID, err := query.graph.OIDAt(commit.Parent2.Pos)
+ if err != nil {
+ return err
+ }
+
+ parents = append(parents, parentRef{
+ ID: parentOID,
+ GraphPos: commit.Parent2.Pos,
+ HasGraphPos: true,
+ })
+ }
+
+ for _, parentPos := range commit.ExtraParents {
+ parentOID, err := query.graph.OIDAt(parentPos)
+ if err != nil {
+ return err
+ }
+
+ parents = append(parents, parentRef{
+ ID: parentOID,
+ GraphPos: parentPos,
+ HasGraphPos: true,
+ })
+ }
+
+ data := commitData{
+ ID: commit.OID,
+ Parents: parents,
+ CommitTime: commit.CommitTimeUnix,
+ Generation: commit.GenerationV2,
+ HasGeneration: commit.GenerationV2 != 0,
+ GraphPos: pos,
+ HasGraphPos: true,
+ }
+
+ return query.populateNode(idx, data)
+}