Skip to content

Commit db63415

Browse files
author
Dawa Ometto
committed
Add Diff.new_from_string
1 parent 551a0fb commit db63415

File tree

2 files changed

+27
-0
lines changed

2 files changed

+27
-0
lines changed

ext/rugged/rugged_diff.c

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -657,10 +657,29 @@ static VALUE rb_git_diff_sorted_icase_p(VALUE self)
657657
return git_diff_is_sorted_icase(diff) ? Qtrue : Qfalse;
658658
}
659659

660+
static VALUE rb_git_diff_from_string(VALUE contents)
661+
{
662+
git_diff *diff;
663+
const char *buffer;
664+
size_t len;
665+
VALUE rb_diff;
666+
667+
buffer = StringValuePtr(contents);
668+
len = strlen(buffer);
669+
670+
git_diff_from_buffer(&diff, buffer, len);
671+
672+
Data_Wrap_Struct(rb_cRuggedDiff, NULL, git_diff_free, diff);
673+
674+
return rb_diff;
675+
}
676+
660677
void Init_rugged_diff(void)
661678
{
662679
rb_cRuggedDiff = rb_define_class_under(rb_mRugged, "Diff", rb_cObject);
663680

681+
rb_define_singleton_method(rb_cRuggedDiff, "new_from_string", rb_git_diff_from_string, 1);
682+
664683
rb_define_method(rb_cRuggedDiff, "patch", rb_git_diff_patch, -1);
665684
rb_define_method(rb_cRuggedDiff, "write_patch", rb_git_diff_write_patch, -1);
666685

test/diff_test.rb

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
require "test_helper"
22

33
class PatchFromStringsTest < Rugged::TestCase
4+
def test_new_from_string
5+
repo = FixtureRepo.from_libgit2("attr")
6+
diff = repo.diff("605812a", nil)
7+
patch = diff.patch
8+
diff2 = Rugged::Diff.new_from_string(patch)
9+
assert_equal diff2.patch, patch
10+
end
11+
412
def test_from_strings_no_args
513
patch = Rugged::Patch.from_strings()
614
assert_equal 0, patch.size

0 commit comments

Comments
 (0)