code: func NewCommitIterCTime(
  	c *Commit,
  	seenExternal map[plumbing.Hash]bool,
  	ignore []plumbing.Hash,
  ) CommitIter {
  	seen := make(map[plumbing.Hash]bool)
  	for _, h := range ignore {
  		seen[h] = true
  	}
  
  	heap := binaryheap.NewWith(func(a, b interface{}) int {
  		if a.(*Commit).Committer.When.Before(b.(*Commit).Committer.When) {
  			return 1
  		}
  		return -1
  	})
  	heap.Push(c)
  
  	return &commitIteratorByCTime{
  		seenExternal: seenExternal,
  		seen:         seen,
  		heap:         heap,
  	}
  }
docs: // NewCommitIterCTime returns a CommitIter that walks the commit history,
  // starting at the given commit and visiting its parents while preserving Committer Time order.
  // this appears to be the closest order to `git log`
  // The given callback will be called for each visited commit. Each commit will
  // be visited only once. If the callback returns an error, walking will stop
  // and will return the error. Other errors might be returned if the history
  // cannot be traversed (e.g. missing objects). Ignore allows to skip some
  // commits from being iterated.