func (p githubPresenter) Changes() <-chan presenter.Change {
	if p.cc == nil {
		return nil
	}
	out := make(chan presenter.Change)
	go func() {
		for i := range p.cc.Commits {
			c := p.cc.Commits[len(p.cc.Commits)-1-i] // Reverse order.
			change := presenter.Change{
				Message: presenter.FirstParagraph(*c.Commit.Message),
				URL:     template.URL(*c.HTMLURL),
			}
			if commentCount := c.Commit.CommentCount; commentCount != nil && *commentCount > 0 {
				change.Comments.Count = *commentCount
				change.Comments.URL = template.URL(*c.HTMLURL + "#comments")
			}
			out <- change
		}
		close(out)
	}()
	return out
}
func (g gitilesPresenter) Changes() <-chan presenter.Change {
	// Verify/find Repo.Remote.Revision.
	log := g.log.Log
	for len(log) > 0 && log[0].Commit != g.repo.Remote.Revision {
		log = log[1:]
	}

	out := make(chan presenter.Change)
	go func() {
		for _, commit := range log {
			if commit.Commit == g.repo.Local.Revision {
				break
			}
			out <- presenter.Change{
				Message: presenter.FirstParagraph(commit.Message),
				URL:     template.URL(g.repo.Remote.RepoURL + "/+/" + commit.Commit + "%5e%21"),
			}
		}
		close(out)
	}()
	return out
}