From 755721e68453c5d6de0681789dbe3307744fc9c4 Mon Sep 17 00:00:00 2001 From: David Calavera Date: Wed, 18 Feb 2015 15:32:50 +0530 Subject: Add BranchIterator#ForEach. This abstracts the branch iteration from the user. --- branch.go | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'branch.go') diff --git a/branch.go b/branch.go index bb231c3..54b01fb 100644 --- a/branch.go +++ b/branch.go @@ -30,10 +30,7 @@ type BranchIterator struct { repo *Repository } -type BranchInfo struct { - Branch *Branch - Type BranchType -} +type BranchIteratorFunc func(*Branch, BranchType) error func newBranchIteratorFromC(repo *Repository, ptr *C.git_branch_iterator) *BranchIterator { i := &BranchIterator{repo: repo, ptr: ptr} @@ -65,8 +62,20 @@ func (i *BranchIterator) Free() { C.git_branch_iterator_free(i.ptr) } -func (repo *Repository) NewBranchIterator(flags BranchType) (*BranchIterator, error) { +func (i *BranchIterator) ForEach(f BranchIteratorFunc) error { + b, t, err := i.Next() + + for err == nil { + err = f(b, t) + if err == nil { + b, t, err = i.Next() + } + } + return err +} + +func (repo *Repository) NewBranchIterator(flags BranchType) (*BranchIterator, error) { refType := C.git_branch_t(flags) var ptr *C.git_branch_iterator -- cgit v1.2.3