Skip to content

Commit c51ec4a

Browse files
committed
Implement Repository#diff_from_buffer(s).
1 parent 2a3eb65 commit c51ec4a

File tree

3 files changed

+28
-30
lines changed

3 files changed

+28
-30
lines changed

ext/rugged/rugged_diff.c

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

660-
/*
661-
* call-seq: Diff.from_buffer(buffer) -> Rugged::Diff object
662-
*
663-
* Where +buffer+ is a +String+.
664-
* Returns A Rugged::Diff object
665-
*/
666-
static VALUE rb_git_diff_from_buffer(VALUE self, VALUE rb_buffer)
667-
{
668-
git_diff *diff = NULL;
669-
const char *buffer;
670-
size_t len;
671-
VALUE rb_diff;
672-
int error;
673-
674-
Check_Type(rb_buffer, T_STRING);
675-
buffer = RSTRING_PTR(rb_buffer);
676-
len = RSTRING_LEN(rb_buffer);
677-
678-
error = git_diff_from_buffer(&diff, buffer, len);
679-
rugged_exception_check(error);
680-
681-
rb_diff = Data_Wrap_Struct(rb_cRuggedDiff, NULL, git_diff_free, diff);
682-
return rb_diff;
683-
}
684-
685660
void Init_rugged_diff(void)
686661
{
687662
rb_cRuggedDiff = rb_define_class_under(rb_mRugged, "Diff", rb_cObject);
688663

689-
rb_define_singleton_method(rb_cRuggedDiff, "from_buffer", rb_git_diff_from_buffer, 1);
690-
691664
rb_define_method(rb_cRuggedDiff, "patch", rb_git_diff_patch, -1);
692665
rb_define_method(rb_cRuggedDiff, "write_patch", rb_git_diff_write_patch, -1);
693666

ext/rugged/rugged_repo.c

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2710,6 +2710,29 @@ static VALUE rb_git_repo_cherrypick_commit(int argc, VALUE *argv, VALUE self)
27102710
return rugged_index_new(rb_cRuggedIndex, self, index);
27112711
}
27122712

2713+
/*
2714+
* call-seq: repo.diff_from_buffer(buffer) -> Rugged::Diff object
2715+
*
2716+
* Where +buffer+ is a +String+.
2717+
* Returns A Rugged::Diff object
2718+
*/
2719+
static VALUE rb_git_diff_from_buffer(VALUE self, VALUE rb_buffer)
2720+
{
2721+
git_diff *diff = NULL;
2722+
const char *buffer;
2723+
size_t len;
2724+
int error;
2725+
2726+
Check_Type(rb_buffer, T_STRING);
2727+
buffer = RSTRING_PTR(rb_buffer);
2728+
len = RSTRING_LEN(rb_buffer);
2729+
2730+
error = git_diff_from_buffer(&diff, buffer, len);
2731+
rugged_exception_check(error);
2732+
2733+
return rugged_diff_new(rb_cRuggedDiff, self, diff);
2734+
}
2735+
27132736
void Init_rugged_repo(void)
27142737
{
27152738
id_call = rb_intern("call");
@@ -2768,6 +2791,8 @@ void Init_rugged_repo(void)
27682791
rb_define_method(rb_cRuggedRepo, "apply", rb_git_repo_apply, -1);
27692792

27702793
rb_define_method(rb_cRuggedRepo, "revert_commit", rb_git_repo_revert_commit, -1);
2794+
2795+
rb_define_method(rb_cRuggedRepo, "diff_from_buffer", rb_git_diff_from_buffer, 1);
27712796

27722797
rb_define_method(rb_cRuggedRepo, "path_ignored?", rb_git_repo_is_path_ignored, 1);
27732798

test/diff_test.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,14 +66,14 @@ def test_from_strings_with_custom_paths
6666

6767
class RepoDiffTest < Rugged::TestCase
6868
def test_new_from_buffer
69+
repo = FixtureRepo.from_libgit2("attr")
6970
patch1 = Rugged::Patch.from_strings("deleted\n", "added\n", old_path: "old", new_path: "new").to_s
70-
diff1 = Rugged::Diff.from_buffer(patch1)
71+
diff1 = repo.diff_from_buffer(patch1)
7172
assert_equal diff1.patch, patch1
7273

73-
repo = FixtureRepo.from_libgit2("attr")
7474
diff2 = repo.diff("605812a", "370fe9ec22", :context_lines => 1, :interhunk_lines => 1)
7575
patch2 = diff2.patch
76-
diff3 = Rugged::Diff.from_buffer(patch2)
76+
diff3 = repo.diff_from_buffer(patch2)
7777
assert_equal diff3.patch, patch2
7878
end
7979

0 commit comments

Comments
 (0)