class Rugged::Walker
Public Class Methods
Source
static VALUE rb_git_walker_new(VALUE klass, VALUE rb_repo)
{
git_repository *repo;
git_revwalk *walk;
int error;
Data_Get_Struct(rb_repo, git_repository, repo);
error = git_revwalk_new(&walk, repo);
rugged_exception_check(error);
return rugged_walker_new(klass, rb_repo, walk);;
}
Create a new Walker instance able to walk commits found in repository, which is a Rugged::Repository instance.
Source
static VALUE rb_git_walk(int argc, VALUE *argv, VALUE self)
{
VALUE rb_repo, rb_options;
struct walk_options w;
int exception = 0;
RETURN_ENUMERATOR(self, argc, argv);
rb_scan_args(argc, argv, "10:", &rb_repo, &rb_options);
Data_Get_Struct(rb_repo, git_repository, w.repo);
rugged_exception_check(git_revwalk_new(&w.walk, w.repo));
w.rb_owner = rb_repo;
w.rb_options = rb_options;
w.oid_only = 0;
w.offset = 0;
w.limit = UINT64_MAX;
if (!NIL_P(w.rb_options))
rb_protect(load_all_options, (VALUE)&w, &exception);
if (!exception)
rb_protect(do_walk, (VALUE)&w, &exception);
git_revwalk_free(w.walk);
if (exception)
rb_jump_tag(exception);
return Qnil;
}
generates:
92b22bbcb37caf4f6f53d30292169e84f5e4283b 6b750d5800439b502de669465b385e5f469c78b6 ef9207141549f4ffcd3c4597e270d32e10d0a6bc cb75e05f0f8ac3407fb3bd0ebd5ff07573b16c9f ...
Public Instance Methods
Source
static VALUE rb_git_walker_count(int argc, VALUE *argv, VALUE self)
{
git_revwalk *walk;
git_oid commit_oid;
int error = 0;
uint64_t count = 0;
if (argc > 0 || rb_block_given_p())
return rb_call_super(argc, argv);
Data_Get_Struct(self, git_revwalk, walk);
while (((error = git_revwalk_next(&commit_oid, walk)) == 0) && ++count != UINT64_MAX);
if (error != GIT_ITEROVER)
rugged_exception_check(error);
return ULONG2NUM(count);
}
Returns the amount of objects a walker iterated over. If an argument or block is given this method delegates to +Enumerable#count+.
Source
static VALUE rb_git_walker_each(int argc, VALUE *argv, VALUE self)
{
return rb_git_walk_with_opts(argc, argv, self, 0);
}
Perform the walk through the repository, yielding each one of the commits found as a Rugged::Commit instance to block.
If no block is given, an Enumerator 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 ...
Source
static VALUE rb_git_walker_each_oid(int argc, VALUE *argv, VALUE self)
{
return rb_git_walk_with_opts(argc, argv, self, 1);
}
Perform the walk through the repository, yielding each one of the commit oids found as a String to block.
If no block is given, an Enumerator 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_oid| puts commit_oid }
generates:
92b22bbcb37caf4f6f53d30292169e84f5e4283b 6b750d5800439b502de669465b385e5f469c78b6 ef9207141549f4ffcd3c4597e270d32e10d0a6bc cb75e05f0f8ac3407fb3bd0ebd5ff07573b16c9f ...
Source
static VALUE rb_git_walker_hide(VALUE self, VALUE rb_commit)
{
git_revwalk *walk;
Data_Get_Struct(self, git_revwalk, walk);
push_commit(walk, rb_commit, 1);
return Qnil;
}
Hide the given commit (and all its parents) from the output in the revision walk.
Source
static VALUE rb_git_walker_push(VALUE self, VALUE rb_commit)
{
git_revwalk *walk;
Data_Get_Struct(self, git_revwalk, walk);
push_commit(walk, rb_commit, 0);
return Qnil;
}
Push one new commit to start the walk from. commit must be a String with the OID of a commit in the repository, or a Rugged::Commit instance.
More than one commit may be pushed to the walker (to walk several branches simulataneously).
Duplicate pushed commits will be ignored; at least one commit must have been pushed as a starting point before the walk can begin.
walker.push("92b22bbcb37caf4f6f53d30292169e84f5e4283b")
Source
static VALUE rb_git_walker_push_range(VALUE self, VALUE range)
{
git_revwalk *walk;
Data_Get_Struct(self, git_revwalk, walk);
rugged_exception_check(git_revwalk_push_range(walk, StringValueCStr(range)));
return Qnil;
}
Source
static VALUE rb_git_walker_reset(VALUE self)
{
git_revwalk *walk;
Data_Get_Struct(self, git_revwalk, walk);
git_revwalk_reset(walk);
return Qnil;
}
Remove all pushed and hidden commits and reset the walker back into a blank state.
Source
static VALUE rb_git_walker_simplify_first_parent(VALUE self)
{
git_revwalk *walk;
Data_Get_Struct(self, git_revwalk, walk);
git_revwalk_simplify_first_parent(walk);
return Qnil;
}
Simplify the walk to the first parent of each commit.
Source
static VALUE rb_git_walker_sorting(VALUE self, VALUE ruby_sort_mode)
{
git_revwalk *walk;
Data_Get_Struct(self, git_revwalk, walk);
git_revwalk_sorting(walk, FIX2INT(ruby_sort_mode));
return Qnil;
}
Change the sorting mode for the revision walk.
This will cause walker to be reset.