aboutsummaryrefslogtreecommitdiff
path: root/mergebase/compute.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-07 16:43:13 +0800
committerGravatar Runxi Yu2026-03-07 16:43:59 +0800
commit7d6c80d1540f8bc06bc6a31086b3723bed7c95db (patch)
treef0f46fd35fed61a24b4fc1b2d1557b81bea9b26a /mergebase/compute.go
parentinternal/commitquery: paintDown only paints, don't collect (diff)
signatureNo signature
mergebase: No fake iterator API first and idempotency
Diffstat (limited to 'mergebase/compute.go')
-rw-r--r--mergebase/compute.go25
1 files changed, 21 insertions, 4 deletions
diff --git a/mergebase/compute.go b/mergebase/compute.go
index 0fae0aed..76d2294c 100644
--- a/mergebase/compute.go
+++ b/mergebase/compute.go
@@ -8,14 +8,25 @@ import (
"codeberg.org/lindenii/furgit/objectid"
)
-func (query *Bases) compute() ([]objectid.ObjectID, error) {
+// All returns all merge bases in Git's merge-base --all order.
+func (query *Bases) All() ([]objectid.ObjectID, error) {
+ if query.computed {
+ return slices.Clone(query.bases), query.err
+ }
+
+ query.computed = true
+
leftCommit, err := peel.ToCommit(query.store, query.left)
if err != nil {
+ query.err = err
+
return nil, err
}
rightCommit, err := peel.ToCommit(query.store, query.right)
if err != nil {
+ query.err = err
+
return nil, err
}
@@ -23,16 +34,22 @@ func (query *Bases) compute() ([]objectid.ObjectID, error) {
leftIdx, err := ctx.ResolveOID(leftCommit)
if err != nil {
+ query.err = err
+
return nil, err
}
rightIdx, err := ctx.ResolveOID(rightCommit)
if err != nil {
+ query.err = err
+
return nil, err
}
candidates, err := commitquery.MergeBases(ctx, leftIdx, rightIdx)
if err != nil {
+ query.err = err
+
return nil, err
}
@@ -47,10 +64,10 @@ func (query *Bases) compute() ([]objectid.ObjectID, error) {
}
})
- out := make([]objectid.ObjectID, 0, len(candidates))
+ query.bases = make([]objectid.ObjectID, 0, len(candidates))
for _, idx := range candidates {
- out = append(out, ctx.ID(idx))
+ query.bases = append(query.bases, ctx.ID(idx))
}
- return out, nil
+ return slices.Clone(query.bases), nil
}