static int walk_and_search(git_object **out, git_revwalk *walk, regex_t *regex) { int error; git_oid oid; git_object *obj; while (!(error = git_revwalk_next(&oid, walk))) { error = git_object_lookup(&obj, git_revwalk_repository(walk), &oid, GIT_OBJ_COMMIT); if ((error < 0) && (error != GIT_ENOTFOUND)) return -1; if (!regexec(regex, git_commit_message((git_commit*)obj), 0, NULL, 0)) { *out = obj; return 0; } git_object_free(obj); } if (error < 0 && error == GIT_ITEROVER) error = GIT_ENOTFOUND; return error; }
/* * call-seq: * walker.each { |commit| block } * walker.each -> Iterator * * Perform the walk through the repository, yielding each * one of the commits found as a <tt>Rugged::Commit</tt> instance * to +block+. * * If no +block+ is given, an +Iterator+ will be returned. * * The walker must have been previously set-up before a walk can be performed * (i.e. at least one commit must have been pushed). * * walker.push("92b22bbcb37caf4f6f53d30292169e84f5e4283b") * walker.each { |commit| puts commit.oid } * * generates: * * 92b22bbcb37caf4f6f53d30292169e84f5e4283b * 6b750d5800439b502de669465b385e5f469c78b6 * ef9207141549f4ffcd3c4597e270d32e10d0a6bc * cb75e05f0f8ac3407fb3bd0ebd5ff07573b16c9f * ... */ static VALUE rb_git_walker_each(VALUE self) { git_revwalk *walk; git_commit *commit; git_repository *repo; git_oid commit_oid; int error; Data_Get_Struct(self, git_revwalk, walk); repo = git_revwalk_repository(walk); if (!rb_block_given_p()) return rb_funcall(self, rb_intern("to_enum"), 0); while ((error = git_revwalk_next(&commit_oid, walk)) == 0) { error = git_commit_lookup(&commit, repo, &commit_oid); rugged_exception_check(error); rb_yield(rugged_object_new(rugged_owner(self), (git_object *)commit)); } if (error != GIT_ITEROVER) rugged_exception_check(error); return Qnil; }
/* * call-seq: * walker.hide(commit) -> nil * * Hide the given +commit+ (and all its parents) from the * output in the revision walk. */ static VALUE rb_git_walker_hide(VALUE self, VALUE rb_commit) { git_revwalk *walk; git_commit *commit; int error; Data_Get_Struct(self, git_revwalk, walk); commit = (git_commit *)rugged_object_get( git_revwalk_repository(walk), rb_commit, GIT_OBJ_COMMIT); error = git_revwalk_hide(walk, git_object_id((git_object *)commit)); git_commit_free(commit); rugged_exception_check(error); return Qnil; }
QGitRepository QGitRevWalk::repository() { return QGitRepository(git_revwalk_repository(m_revWalk)); }