From 44626e60bf2bac53e2e3988874d310e7882eaabf Mon Sep 17 00:00:00 2001 From: Runxi Yu Date: Fri, 21 Mar 2025 16:55:53 +0800 Subject: Output git logs incrementally --- git_misc.go | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'git_misc.go') 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 -- cgit v1.2.3