aboutsummaryrefslogtreecommitdiff
path: root/git_misc.go
diff options
context:
space:
mode:
Diffstat (limited to 'git_misc.go')
-rw-r--r--git_misc.go35
1 files changed, 35 insertions, 0 deletions
diff --git a/git_misc.go b/git_misc.go
index cd2dc4d..5b19965 100644
--- a/git_misc.go
+++ b/git_misc.go
@@ -7,6 +7,7 @@ import (
"context"
"errors"
"io"
+ "iter"
"os"
"strings"
@@ -96,6 +97,40 @@ func makeDisplayTree(tree *object.Tree) (displayTree []displayTreeEntry) {
return displayTree
}
+func commitIterSeqErr(commitIter object.CommitIter) (iter.Seq[*object.Commit], *error) {
+ var err error
+ return func(yield func(*object.Commit) bool) {
+ for {
+ commit, err2 := commitIter.Next()
+ if err2 != nil {
+ if errors.Is(err2, io.EOF) {
+ return
+ }
+ err = err2
+ return
+ }
+ if !yield(commit) {
+ return
+ }
+ }
+ }, &err
+}
+
+func iterSeqLimit[T any](s iter.Seq[T], n uint) iter.Seq[T] {
+ return func(yield func(T) bool) {
+ var i uint
+ for v := range s {
+ if i > n-1 {
+ return
+ }
+ if !yield(v) {
+ return
+ }
+ i++
+ }
+ }
+}
+
func getRecentCommits(repo *git.Repository, headHash plumbing.Hash, numCommits int) (recentCommits []*object.Commit, err error) {
var commitIter object.CommitIter
var thisCommit *object.Commit