shithub: furgit

ref: aa048b1320e5ae4a72a1927476460955a8727c52
dir: /mergebase/seq.go/

View raw version
package mergebase

import (
	"errors"
	"iter"

	"codeberg.org/lindenii/furgit/objectid"
)

// Seq returns the merge-base sequence. It is single-use.
func (query *Bases) Seq() iter.Seq[objectid.ObjectID] {
	if query.seqUsed {
		return func(yield func(objectid.ObjectID) bool) {
			_ = yield

			if query.err == nil {
				query.err = errors.New("mergebase: sequence already consumed")
			}
		}
	}

	query.seqUsed = true

	return func(yield func(objectid.ObjectID) bool) {
		if query.err != nil {
			return
		}

		bases, err := query.compute()
		if err != nil {
			query.err = err

			return
		}

		for _, id := range bases {
			if !yield(id) {
				return
			}
		}
	}
}

// Err returns the terminal error, if any, once Seq has been consumed.
func (query *Bases) Err() error {
	return query.err
}