aboutsummaryrefslogtreecommitdiff
path: root/commitquery/query_merge_bases_internal.go
diff options
context:
space:
mode:
authorGravatar Runxi Yu2026-03-29 14:42:13 +0000
committerGravatar Runxi Yu2026-03-29 14:47:04 +0000
commitdf73a4c6f1b58075316ba7449fbfb127b9fbb79d (patch)
tree62fee259ec037410b06419ee3ac9c2c189c35ab3 /commitquery/query_merge_bases_internal.go
parentinternal/priorityqueue: Update docs (diff)
signatureNo signature
commitquery: Reorganize
Diffstat (limited to 'commitquery/query_merge_bases_internal.go')
-rw-r--r--commitquery/query_merge_bases_internal.go34
1 files changed, 34 insertions, 0 deletions
diff --git a/commitquery/query_merge_bases_internal.go b/commitquery/query_merge_bases_internal.go
new file mode 100644
index 00000000..2d133435
--- /dev/null
+++ b/commitquery/query_merge_bases_internal.go
@@ -0,0 +1,34 @@
+package commitquery
+
+import "slices"
+
+// mergeBases returns internal merge-base candidates for two resolved nodes.
+func (query *query) mergeBases(left, right nodeIndex) ([]nodeIndex, error) {
+ if left == right {
+ return []nodeIndex{left}, nil
+ }
+
+ err := query.paintDownToCommon(left, []nodeIndex{right}, 0)
+ if err != nil {
+ return nil, err
+ }
+
+ candidates := query.collectMarkedResults()
+
+ if len(candidates) <= 1 {
+ slices.SortFunc(candidates, query.compare)
+
+ return candidates, nil
+ }
+
+ query.clearTouchedMarks(allMarks)
+
+ reduced, err := removeRedundant(query, candidates)
+ if err != nil {
+ return nil, err
+ }
+
+ slices.SortFunc(reduced, query.compare)
+
+ return reduced, nil
+}