summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorCarlos Martín Nieto <cmn@dwim.me>2015-06-06 03:55:28 +0200
committerCarlos Martín Nieto <cmn@dwim.me>2015-06-06 03:55:28 +0200
commit8da44047050c16b563575cf973c1f33b6149f1cc (patch)
treee714d8e1ef4313156cb8d996092abca8d4e1f5de /tests
parentbabdc376c7a0ed698ada5f0512789bd99a8b2c4a (diff)
downloadlibgit2-8da44047050c16b563575cf973c1f33b6149f1cc.tar.gz
path: error out if the callback returns an errorcmn/foreach-cancel-loose
When the callback returns an error, we should stop immediately. This broke when trying to make sure we pass specific errors up the chain. This broke cancelling out of the loose backend's foreach.
Diffstat (limited to 'tests')
-rw-r--r--tests/odb/foreach.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/tests/odb/foreach.c b/tests/odb/foreach.c
index 75448a2f7..12b81b4f1 100644
--- a/tests/odb/foreach.c
+++ b/tests/odb/foreach.c
@@ -71,15 +71,35 @@ static int foreach_stop_cb(const git_oid *oid, void *data)
return (*nobj == 1000) ? -321 : 0;
}
+static int foreach_stop_first_cb(const git_oid *oid, void *data)
+{
+ int *nobj = data;
+ (*nobj)++;
+
+ GIT_UNUSED(oid);
+
+ return -123;
+}
+
void test_odb_foreach__interrupt_foreach(void)
{
int nobj = 0;
+ git_oid id;
cl_git_pass(git_repository_open(&_repo, cl_fixture("testrepo.git")));
git_repository_odb(&_odb, _repo);
cl_assert_equal_i(-321, git_odb_foreach(_odb, foreach_stop_cb, &nobj));
cl_assert(nobj == 1000);
+
+ git_odb_free(_odb);
+ git_repository_free(_repo);
+
+ cl_git_pass(git_repository_init(&_repo, "onlyloose.git", true));
+ git_repository_odb(&_odb, _repo);
+
+ cl_git_pass(git_odb_write(&id, _odb, "", 0, GIT_OBJ_BLOB));
+ cl_assert_equal_i(-123, git_odb_foreach(_odb, foreach_stop_first_cb, &nobj));
}
void test_odb_foreach__files_in_objects_dir(void)