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.



102
103
104
105
106
107
108
109
110
111
112
113
114
# File 'ext/rugged/rugged_revwalk.c', line 102

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

.Rugged::Walker.walk(repo, options = ) { ... } ⇒ Object

Create a Walker object, initialize it with the given options and perform a walk on the repository; the lifetime of the walker is bound to the call and it is immediately cleaned up after the walk is over.

The following options are available:

  • sort: Sorting mode for the walk (or an OR combination

of several sorting modes).

  • show: Tips of the repository that will be walked;

this is necessary for the walk to yield any results. A tip can be a 40-char object ID, an existing Rugged::Commit object, a reference, or an Array of several of these (if you’d like to walk several tips in parallel).

  • hide: Same as show, but hides the given tips instead

so they don’t appear on the walk.

  • oid_only: if true, the walker will yield 40-char OIDs

for each commit, instead of real Rugged::Commit objects. Defaults to false.

  • simplify: if true, the walk will be simplified

to the first parent of each commit.

Example:

Rugged::Walker.walk(repo,

show: “92b22bbcb37caf4f6f53d30292169e84f5e4283b”, sort: Rugged::SORT_DATE|Rugged::SORT_TOPO, oid_only: true) do |commit_oid| puts commit_oid end

generates:

92b22bbcb37caf4f6f53d30292169e84f5e4283b
6b750d5800439b502de669465b385e5f469c78b6
ef9207141549f4ffcd3c4597e270d32e10d0a6bc
cb75e05f0f8ac3407fb3bd0ebd5ff07573b16c9f
...

Yields:



352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
# File 'ext/rugged/rugged_revwalk.c', line 352

static VALUE rb_git_walk(int argc, VALUE *argv, VALUE self)
{
	VALUE rb_repo, rb_options;
	struct walk_options w;
	int exception = 0;

	rb_scan_args(argc, argv, "10:", &rb_repo, &rb_options);

	if (!rb_block_given_p()) {
		ID iter_method = ID2SYM(rb_intern("walk"));
		return rb_funcall(self, rb_intern("to_enum"), 3,
			iter_method, 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;
}

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)


443
444
445
446
# File 'ext/rugged/rugged_revwalk.c', line 443

static VALUE rb_git_walker_each(int argc, VALUE *argv, VALUE self)
{
	return rb_git_walk_with_opts(argc, argv, self, 0);
}

#each_oid {|commit| ... } ⇒ Object #each_oidIterator

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 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_oid| puts commit_oid }

generates:

92b22bbcb37caf4f6f53d30292169e84f5e4283b
6b750d5800439b502de669465b385e5f469c78b6
ef9207141549f4ffcd3c4597e270d32e10d0a6bc
cb75e05f0f8ac3407fb3bd0ebd5ff07573b16c9f
...

Overloads:

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

    Yields:

    • (commit)
  • #each_oidIterator

    Returns:

    • (Iterator)


473
474
475
476
# File 'ext/rugged/rugged_revwalk.c', line 473

static VALUE rb_git_walker_each_oid(int argc, VALUE *argv, VALUE self)
{
	return rb_git_walk_with_opts(argc, argv, self, 1);
}

#hide(commit) ⇒ nil

Hide the given commit (and all its parents) from the output in the revision walk.

Returns:

  • (nil)


155
156
157
158
159
160
161
# File 'ext/rugged/rugged_revwalk.c', line 155

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

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


132
133
134
135
136
137
138
# File 'ext/rugged/rugged_revwalk.c', line 132

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_range(range) ⇒ Object



140
141
142
143
144
145
146
# File 'ext/rugged/rugged_revwalk.c', line 140

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

#resetnil

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

Returns:

  • (nil)


200
201
202
203
204
205
206
# File 'ext/rugged/rugged_revwalk.c', line 200

static VALUE rb_git_walker_reset(VALUE self)
{
	git_revwalk *walk;
	Data_Get_Struct(self, git_revwalk, walk);
	git_revwalk_reset(walk);
	return Qnil;
}

#simplify_first_parentnil

Simplify the walk to the first parent of each commit.

Returns:

  • (nil)


185
186
187
188
189
190
191
# File 'ext/rugged/rugged_revwalk.c', line 185

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

#sorting(sort_mode) ⇒ nil

Change the sorting mode for the revision walk.

This will cause walker to be reset.

Returns:

  • (nil)


171
172
173
174
175
176
177
# File 'ext/rugged/rugged_revwalk.c', line 171

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)


443
444
445
446
# File 'ext/rugged/rugged_revwalk.c', line 443

static VALUE rb_git_walker_each(int argc, VALUE *argv, VALUE self)
{
	return rb_git_walk_with_opts(argc, argv, self, 0);
}