package object import ( "io" "time" "gopkg.in/src-d/go-git.v4/plumbing/storer" ) type commitLimitIter struct { sourceIter CommitIter limitOptions LogLimitOptions } type LogLimitOptions struct { Since *time.Time Until *time.Time } func NewCommitLimitIterFromIter(commitIter CommitIter, limitOptions LogLimitOptions) CommitIter { iterator := new(commitLimitIter) iterator.sourceIter = commitIter iterator.limitOptions = limitOptions return iterator } func (c *commitLimitIter) Next() (*Commit, error) { for { commit, err := c.sourceIter.Next() if err != nil { return nil, err } if c.limitOptions.Since != nil && commit.Committer.When.Before(*c.limitOptions.Since) { continue } if c.limitOptions.Until != nil && commit.Committer.When.After(*c.limitOptions.Until) { continue } return commit, nil } } func (c *commitLimitIter) ForEach(cb func(*Commit) error) error { for { commit, nextErr := c.Next() if nextErr == io.EOF { break } if nextErr != nil { return nextErr } err := cb(commit) if err == storer.ErrStop { return nil } else if err != nil { return err } } return nil } func (c *commitLimitIter) Close() { c.sourceIter.Close() }