@@ -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+
27132736void 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
0 commit comments