Class: Rugged::Walker
- Inherits:
-
Object
- Object
- Rugged::Walker
- Includes:
- Enumerable
- Defined in:
- lib/rugged/walker.rb,
ext/rugged/rugged_revwalk.c
Class Method Summary collapse
-
.new(repository) ⇒ Object
Create a new
Walker
instance able to walk commits found inrepository
, which is aRugged::Repository
instance.
Instance Method Summary collapse
-
#each ⇒ Object
Perform the walk through the repository, yielding each one of the commits found as a
Rugged::Commit
instance toblock
. -
#hide(commit) ⇒ nil
Hide the given
commit
(and all its parents) from the output in the revision walk. -
#push(commit) ⇒ nil
Push one new
commit
to start the walk from. -
#reset ⇒ nil
Remove all pushed and hidden commits and reset the
walker
back into a blank state. -
#sorting=(sort_mode) ⇒ Object
Change the sorting mode for the revision walk.
-
#walk ⇒ Object
Perform the walk through the repository, yielding each one of the commits found as a
Rugged::Commit
instance toblock
.
Class Method Details
.new(repository) ⇒ Object
Create a new Walker
instance able to walk commits found in repository
, which is a Rugged::Repository
instance.
49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'ext/rugged/rugged_revwalk.c', line 49
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);;
}
|
Instance Method Details
#each {|commit| ... } ⇒ Object #each ⇒ Iterator
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 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
...
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'ext/rugged/rugged_revwalk.c', line 88
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;
}
|
#hide(commit) ⇒ nil
Hide the given commit
(and all its parents) from the output in the revision walk.
157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 |
# File 'ext/rugged/rugged_revwalk.c', line 157
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;
}
|
#push(commit) ⇒ nil
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")
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 |
# File 'ext/rugged/rugged_revwalk.c', line 131
static VALUE rb_git_walker_push(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_push(walk, git_object_id((git_object *)commit));
git_commit_free(commit);
rugged_exception_check(error);
return Qnil;
}
|
#reset ⇒ nil
Remove all pushed and hidden commits and reset the walker
back into a blank state.
199 200 201 202 203 204 205 |
# File 'ext/rugged/rugged_revwalk.c', line 199
static VALUE rb_git_walker_reset(VALUE self)
{
git_revwalk *walk;
Data_Get_Struct(self, git_revwalk, walk);
git_revwalk_reset(walk);
return Qnil;
}
|
#sorting=(sort_mode) ⇒ Object
Change the sorting mode for the revision walk.
This will cause walker
to be reset.
184 185 186 187 188 189 190 |
# File 'ext/rugged/rugged_revwalk.c', line 184
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;
}
|
#each {|commit| ... } ⇒ Object #each ⇒ Iterator
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 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
...
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'ext/rugged/rugged_revwalk.c', line 88
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;
}
|