class Rugged::Patch
Attributes
Public Class Methods
Directly generate a Rugged::Patch from the difference between the content of the two strings `old_content` and `new_content`.
The following options can be passed in the options Hash:
- :old_path
-
An optional string to treat
blobas if it had this filename. - :new_path
-
An optional string to treat
otheras if it had this filename.
Additionally, `options` can also contain all other valid diff options (see Rugged::Tree#diff for a complete list).
VALUE rb_git_patch_from_strings(int argc, VALUE *argv, VALUE self)
{
git_diff_options opts = GIT_DIFF_OPTIONS_INIT;
git_patch *patch;
char * old_path = NULL, * new_path = NULL;
VALUE rb_old_buffer, rb_new_buffer, rb_options;
rb_scan_args(argc, argv, "02:", &rb_old_buffer, &rb_new_buffer, &rb_options);
if (!NIL_P(rb_options)) {
VALUE rb_value;
rb_value = rb_hash_aref(rb_options, CSTR2SYM("old_path"));
if (!NIL_P(rb_value)) {
Check_Type(rb_value, T_STRING);
old_path = StringValueCStr(rb_value);
}
rb_value = rb_hash_aref(rb_options, CSTR2SYM("new_path"));
if (!NIL_P(rb_value)) {
Check_Type(rb_value, T_STRING);
new_path = StringValueCStr(rb_value);
}
rugged_parse_diff_options(&opts, rb_options);
}
rugged_exception_check(git_patch_from_buffers(&patch,
NIL_P(rb_old_buffer) ? NULL : StringValuePtr(rb_old_buffer),
NIL_P(rb_old_buffer) ? 0 : RSTRING_LEN(rb_old_buffer),
old_path,
NIL_P(rb_new_buffer) ? NULL : StringValuePtr(rb_new_buffer),
NIL_P(rb_new_buffer) ? 0 : RSTRING_LEN(rb_new_buffer),
new_path,
&opts
));
return rugged_patch_new(self, patch);
}
Public Instance Methods
Returns the number of changes in the patch.
# File lib/rugged/patch.rb, line 17 def changes stat.reduce { |t,v| t + v } end
Returns the delta object associated with the patch.
static VALUE rb_git_diff_patch_delta(VALUE self)
{
git_patch *patch;
Data_Get_Struct(self, git_patch, patch);
return rugged_diff_delta_new(rugged_owner(self), git_patch_get_delta(patch));
}
If given a block, yields each hunk that is part of the patch.
If no block is given, an enumerator is returned instead.
static VALUE rb_git_diff_patch_each_hunk(VALUE self)
{
git_patch *patch;
const git_diff_hunk *hunk;
size_t lines_in_hunk;
int error = 0;
size_t hunks_count, h;
if (!rb_block_given_p()) {
return rb_funcall(self, rb_intern("to_enum"), 1, CSTR2SYM("each_hunk"), self);
}
Data_Get_Struct(self, git_patch, patch);
hunks_count = git_patch_num_hunks(patch);
for (h = 0; h < hunks_count; ++h) {
error = git_patch_get_hunk(&hunk, &lines_in_hunk, patch, h);
if (error) break;
rb_yield(rugged_diff_hunk_new(self, h, hunk, lines_in_hunk));
}
rugged_exception_check(error);
return self;
}
Returns the number of hunks in the patch.
static VALUE rb_git_diff_patch_hunk_count(VALUE self)
{
git_patch *patch;
Data_Get_Struct(self, git_patch, patch);
return INT2FIX(git_patch_num_hunks(patch));
}
Returns an Array containing all hunks of the patch.
# File lib/rugged/patch.rb, line 22 def hunks each_hunk.to_a end
# File lib/rugged/patch.rb, line 12 def inspect "#<#{self.class.name}:#{object_id}>" end
Returns the total number of lines in the patch.
static VALUE rb_git_diff_patch_lines(VALUE self)
{
git_patch *patch;
size_t context, adds, dels;
Data_Get_Struct(self, git_patch, patch);
git_patch_line_stats(&context, &adds, &dels, patch);
return INT2FIX(context + adds + dels);
}
Returns the number of additions and deletions in the patch.
static VALUE rb_git_diff_patch_stat(VALUE self)
{
git_patch *patch;
size_t additions, deletions;
Data_Get_Struct(self, git_patch, patch);
git_patch_line_stats(NULL, &additions, &deletions, patch);
return rb_ary_new3(2, INT2FIX(additions), INT2FIX(deletions));
}
Returns the contents of the patch as a single diff string.
static VALUE rb_git_diff_patch_to_s(VALUE self)
{
git_patch *patch;
VALUE rb_str = rb_str_new(NULL, 0);
Data_Get_Struct(self, git_patch, patch);
rugged_exception_check(git_patch_print(patch, patch_print_cb, (void*)rb_str));
return rb_str;
}