diff options
Diffstat (limited to 'tests/libgit2/threads/iterator.c')
-rw-r--r-- | tests/libgit2/threads/iterator.c | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/tests/libgit2/threads/iterator.c b/tests/libgit2/threads/iterator.c new file mode 100644 index 000000000..33d1bda81 --- /dev/null +++ b/tests/libgit2/threads/iterator.c @@ -0,0 +1,55 @@ +#include "clar_libgit2.h" +#include "thread_helpers.h" +#include "iterator.h" + +static git_repository *_repo; + +void test_threads_iterator__cleanup(void) +{ + cl_git_sandbox_cleanup(); +} + +static void *run_workdir_iterator(void *arg) +{ + int error = 0; + git_repository *repo; + git_iterator *iter; + git_iterator_options iter_opts = GIT_ITERATOR_OPTIONS_INIT; + const git_index_entry *entry = NULL; + + iter_opts.flags = GIT_ITERATOR_DONT_AUTOEXPAND; + + cl_git_pass(git_repository_open(&repo, git_repository_path(_repo))); + cl_git_pass(git_iterator_for_workdir( + &iter, repo, NULL, NULL, &iter_opts)); + + while (!error) { + if (entry && entry->mode == GIT_FILEMODE_TREE) { + error = git_iterator_advance_into(&entry, iter); + + if (error == GIT_ENOTFOUND) + error = git_iterator_advance(&entry, iter); + } else { + error = git_iterator_advance(&entry, iter); + } + + if (!error) + (void)git_iterator_current_is_ignored(iter); + } + + cl_assert_equal_i(GIT_ITEROVER, error); + + git_iterator_free(iter); + git_repository_free(repo); + git_error_clear(); + return arg; +} + + +void test_threads_iterator__workdir(void) +{ + _repo = cl_git_sandbox_init("status"); + + run_in_parallel( + 1, 20, run_workdir_iterator, NULL, NULL); +} |