Class: Rugged::Walker

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/rugged/walker.rb,
ext/rugged/rugged_revwalk.c

Class Method Summary collapse

Instance Method Summary collapse

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 #eachIterator

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
...

Overloads:

  • #each {|commit| ... } ⇒ Object

    Yields:

    • (commit)
  • #eachIterator

    Returns:

    • (Iterator)


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.

Returns:

  • (nil)


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")

Returns:

  • (nil)


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;
}

#resetnil

Remove all pushed and hidden commits and reset the walker back into a blank state.

Returns:

  • (nil)


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 #eachIterator

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
...

Overloads:

  • #each {|commit| ... } ⇒ Object

    Yields:

    • (commit)
  • #eachIterator

    Returns:

    • (Iterator)


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;
}