Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/libgit2.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEdward Thomson <ethomson@github.com>2016-02-26 00:05:18 +0300
committerEdward Thomson <ethomson@github.com>2016-03-24 00:08:37 +0300
commitbe30387e8b95cbc626e2a4a4ebba9ac9678a1c06 (patch)
tree0ebbf7c85ec188a27a24d1bf60b1e17cb7520c19 /tests/diff
parent277c85eb1c54804ab503ade69be058a0afd426f4 (diff)
iterators: refactored tree iterator
Refactored the tree iterator to never recurse; simply process the next entry in order in `advance`. Additionally, reduce the number of allocations and sorting as much as possible to provide a ~30% speedup on case-sensitive iteration. (The gains for case-insensitive iteration are less majestic.)
Diffstat (limited to 'tests/diff')
-rw-r--r--tests/diff/iterator.c13
1 files changed, 3 insertions, 10 deletions
diff --git a/tests/diff/iterator.c b/tests/diff/iterator.c
index b64c95415..4c9585047 100644
--- a/tests/diff/iterator.c
+++ b/tests/diff/iterator.c
@@ -264,37 +264,30 @@ static void check_tree_entry(
const git_index_entry *ie;
const git_tree_entry *te;
const git_tree *tree;
- git_buf path = GIT_BUF_INIT;
cl_git_pass(git_iterator_current_tree_entry(&te, i));
cl_assert(te);
cl_assert(git_oid_streq(te->oid, oid) == 0);
cl_git_pass(git_iterator_current(&ie, i));
- cl_git_pass(git_buf_sets(&path, ie->path));
if (oid_p) {
- git_buf_rtruncate_at_char(&path, '/');
- cl_git_pass(git_iterator_current_parent_tree(&tree, i, path.ptr));
+ cl_git_pass(git_iterator_current_parent_tree(&tree, i, 0));
cl_assert(tree);
cl_assert(git_oid_streq(git_tree_id(tree), oid_p) == 0);
}
if (oid_pp) {
- git_buf_rtruncate_at_char(&path, '/');
- cl_git_pass(git_iterator_current_parent_tree(&tree, i, path.ptr));
+ cl_git_pass(git_iterator_current_parent_tree(&tree, i, 1));
cl_assert(tree);
cl_assert(git_oid_streq(git_tree_id(tree), oid_pp) == 0);
}
if (oid_ppp) {
- git_buf_rtruncate_at_char(&path, '/');
- cl_git_pass(git_iterator_current_parent_tree(&tree, i, path.ptr));
+ cl_git_pass(git_iterator_current_parent_tree(&tree, i, 2));
cl_assert(tree);
cl_assert(git_oid_streq(git_tree_id(tree), oid_ppp) == 0);
}
-
- git_buf_free(&path);
}
void test_diff_iterator__tree_special_functions(void)