Commit 09c2f91c150a4862c9189d9e08d0dc111d4d706c

Vicent Marti 2013-06-17T18:48:02

branch: More obvious semantics in `foreach`

diff --git a/src/branch.c b/src/branch.c
index 590cdc0..7064fa7 100644
--- a/src/branch.c
+++ b/src/branch.c
@@ -137,7 +137,7 @@ int git_branch_foreach(
 	if (git_reference_iterator_new(&iter, repo) < 0)
 		return -1;
 
-	while (!error && (error = git_reference_next(&ref, iter)) == 0) {
+	while ((error = git_reference_next(&ref, iter)) == 0) {
 		if (list_flags & GIT_BRANCH_LOCAL &&
 		    git__prefixcmp(ref->name, GIT_REFS_HEADS_DIR) == 0) {
 			if (callback(ref->name + strlen(GIT_REFS_HEADS_DIR),
@@ -155,6 +155,10 @@ int git_branch_foreach(
 		}
 
 		git_reference_free(ref);
+
+		/* check if the callback has cancelled iteration */
+		if (error == GIT_EUSER)
+			break;
 	}
 
 	if (error == GIT_ITEROVER)