int git_revwalk_next(git_oid *oid, git_revwalk *walk) { int error; git_commit_list_node *next; assert(walk && oid); if (!walk->walking) { if ((error = prepare_walk(walk)) < 0) return error; } error = walk->get_next(&next, walk); if (error == GIT_ITEROVER) { git_revwalk_reset(walk); giterr_clear(); return GIT_ITEROVER; } if (!error) git_oid_cpy(oid, &next->oid); return error; }
/* * call-seq: * walker.reset -> nil * * Remove all pushed and hidden commits and reset the +walker+ * back into a blank state. */ static VALUE rb_git_walker_reset(VALUE self) { git_revwalk *walk; Data_Get_Struct(self, git_revwalk, walk); git_revwalk_reset(walk); return Qnil; }
void test_revwalk_basic__push_range(void) { git_revwalk_reset(_walk); git_revwalk_sorting(_walk, 0); cl_git_pass(git_revwalk_push_range(_walk, "9fd738e~2..9fd738e")); cl_git_pass(test_walk_only(_walk, commit_sorting_segment, 1)); }
void git_revwalk_free(git_revwalk *walk) { if (walk == NULL) return; git_revwalk_reset(walk); git_hashtable_free(walk->commits); free(walk); }
int git_revwalk_sorting(git_revwalk *walk, unsigned int sort_mode) { assert(walk); if (walk->walking) return GIT_EBUSY; walk->sorting = sort_mode; git_revwalk_reset(walk); return GIT_SUCCESS; }
void git_revwalk_free(git_revwalk *walk) { if (walk == NULL) return; git_revwalk_reset(walk); git_odb_free(walk->odb); git_oidmap_free(walk->commits); git_pool_clear(&walk->commit_pool); git_pqueue_free(&walk->iterator_time); git__free(walk); }
/* Helper to get the latest commit of the specified file */ int git_show_last_commit(char *filename) { git_oid oid; git_commit *commit = NULL; /* Set up pathspec. */ git_diff_options diffopts = GIT_DIFF_OPTIONS_INIT; diffopts.pathspec.strings = &filename; diffopts.pathspec.count = 1; /* Use the revwalker to traverse the history. */ check_lg2(git_revwalk_push_ref(s.walker, s.ref), "Could not find repository reference", NULL); for (; !git_revwalk_next(&oid, s.walker); git_commit_free(commit)) { check_lg2(git_commit_lookup(&commit, s.repo, &oid), "Failed to look up commit", NULL); int parents = (int)git_commit_parentcount(commit); int unmatched = parents; if (parents == 0) { git_tree *tree; git_pathspec *ps; check_lg2(git_commit_tree(&tree, commit), "Get tree", NULL); check_lg2(git_pathspec_new(&ps, &diffopts.pathspec), "Building pathspec", NULL); if (git_pathspec_match_tree( NULL, tree, GIT_PATHSPEC_NO_MATCH_ERROR, ps) != 0) unmatched = 1; git_pathspec_free(ps); git_tree_free(tree); } else { int i; for (i = 0; i < parents; ++i) { if (match_with_parent(commit, i, &diffopts)) unmatched--; } } if (unmatched > 0) continue; print_commit(commit); git_commit_free(commit); break; } git_revwalk_reset(s.walker); return 0; }
void git_revwalk_sorting(git_revwalk *walk, unsigned int sort_mode) { assert(walk); if (walk->walking) git_revwalk_reset(walk); walk->sorting = sort_mode; if (walk->sorting & GIT_SORT_TIME) { walk->get_next = &revwalk_next_timesort; walk->enqueue = &revwalk_enqueue_timesort; } else { walk->get_next = &revwalk_next_unsorted; walk->enqueue = &revwalk_enqueue_unsorted; } }
void test_revwalk_basic__push_all(void) { git_oid oid; int i = 0; revwalk_basic_setup_walk(NULL); git_revwalk_reset(_walk); git_revwalk_sorting(_walk, 0); cl_git_pass(git_revwalk_push_glob(_walk, "*")); while (git_revwalk_next(&oid, _walk) == 0) { i++; } /* git rev-list --count --all #=> 15 */ cl_assert_equal_i(15, i); }
void test_revwalk_basic__push_mixed(void) { git_oid oid; int i = 0; revwalk_basic_setup_walk(NULL); git_revwalk_reset(_walk); git_revwalk_sorting(_walk, 0); cl_git_pass(git_revwalk_push_glob(_walk, "tags")); while (git_revwalk_next(&oid, _walk) == 0) { i++; } /* git rev-list --count --glob=tags #=> 9 */ cl_assert_equal_i(9, i); }
void git_revwalk_free(git_revwalk *walk) { unsigned int i; const void *_unused; commit_object *commit; if (walk == NULL) return; git_revwalk_reset(walk); /* if the parent has more than PARENTS_PER_COMMIT parents, * we had to allocate a separate array for those parents. * make sure it's being free'd */ GIT_HASHTABLE_FOREACH(walk->commits, _unused, commit, { if (commit->out_degree > PARENTS_PER_COMMIT) free(commit->parents); });
int git_revwalk_next(git_commit **commit, git_revwalk *walk) { git_revwalk_commit *next; assert(walk && commit); if (!walk->walking) prepare_walk(walk); *commit = NULL; while ((next = walk->next(&walk->iterator)) != NULL) { if (!next->uninteresting) { *commit = next->commit_object; GIT_OBJECT_INCREF(*commit); return GIT_SUCCESS; } } /* No commits left to iterate */ git_revwalk_reset(walk); return GIT_EREVWALKOVER; }
PyObject * Walker_reset(Walker *self) { git_revwalk_reset(self->walk); Py_RETURN_NONE; }
void QGitRevWalk::reset() const { return git_revwalk_reset(m_revWalk); }