diff options
| author | 2026-03-29 14:42:13 +0000 | |
|---|---|---|
| committer | 2026-03-29 14:47:04 +0000 | |
| commit | df73a4c6f1b58075316ba7449fbfb127b9fbb79d (patch) | |
| tree | 62fee259ec037410b06419ee3ac9c2c189c35ab3 /commitquery/merge_bases.go | |
| parent | internal/priorityqueue: Update docs (diff) | |
| signature | No signature | |
commitquery: Reorganize
Diffstat (limited to 'commitquery/merge_bases.go')
| -rw-r--r-- | commitquery/merge_bases.go | 89 |
1 files changed, 0 insertions, 89 deletions
diff --git a/commitquery/merge_bases.go b/commitquery/merge_bases.go deleted file mode 100644 index 281906f3..00000000 --- a/commitquery/merge_bases.go +++ /dev/null @@ -1,89 +0,0 @@ -package commitquery - -import ( - "slices" - - objectid "codeberg.org/lindenii/furgit/object/id" -) - -// MergeBases reports all merge bases in Git's merge-base --all order. -// -// Both inputs are peeled through annotated tags before commit traversal. -func (query *query) MergeBases(left, right objectid.ObjectID) ([]objectid.ObjectID, error) { - leftIdx, err := query.resolveCommitish(left) - if err != nil { - return nil, err - } - - rightIdx, err := query.resolveCommitish(right) - if err != nil { - return nil, err - } - - candidates, err := query.mergeBases(leftIdx, rightIdx) - if err != nil { - return nil, err - } - - slices.SortFunc(candidates, func(left, right nodeIndex) int { - switch { - case query.commitTime(left) > query.commitTime(right): - return -1 - case query.commitTime(left) < query.commitTime(right): - return 1 - default: - return objectid.Compare(query.id(left), query.id(right)) - } - }) - - out := make([]objectid.ObjectID, 0, len(candidates)) - for _, idx := range candidates { - out = append(out, query.id(idx)) - } - - return out, nil -} - -// MergeBase reports one merge base between left and right, if any. -func (query *query) MergeBase(left, right objectid.ObjectID) (objectid.ObjectID, bool, error) { - bases, err := query.MergeBases(left, right) - if err != nil { - return objectid.ObjectID{}, false, err - } - - if len(bases) == 0 { - return objectid.ObjectID{}, false, nil - } - - return bases[0], true, nil -} - -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 -} |
