Index: subversion/bindings/swig/svn_ra.i =================================================================== --- subversion/bindings/swig/svn_ra.i (revision 19715) +++ subversion/bindings/swig/svn_ra.i (working copy) @@ -52,7 +52,8 @@ const svn_ra_reporter2_t **reporter, void **report_baton, svn_dirent_t **dirent, - svn_lock_t **lock + svn_lock_t **lock, + const svn_delta_editor_t ** }; %apply apr_hash_t **PROPHASH { apr_hash_t **props }; Index: subversion/bindings/swig/python/tests/ra.py =================================================================== --- subversion/bindings/swig/python/tests/ra.py (revision 19715) +++ subversion/bindings/swig/python/tests/ra.py (working copy) @@ -58,6 +58,12 @@ self.assertTrue(dirents.has_key('README2.txt')) self.assertEqual(dirents['README2.txt'].kind,core.svn_node_file) + def test_commit(self): + def my_callback(info, pool): + self.assertEqual(info.revision, fs.youngest_rev(self.fs)) + + ra.get_commit_editor2(self.ra_ctx, "foobar", my_callback, None, False) + def suite(): return unittest.makeSuite(SubversionRepositoryTestCase, 'test', suiteClass=SubversionRepositoryTestSetup) Index: subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c =================================================================== --- subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c (revision 19715) +++ subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c (working copy) @@ -552,6 +552,7 @@ DECLARE_SWIG_CONSTRUCTOR(auth_ssl_server_cert_info, svn_auth_ssl_server_cert_info_dup) DECLARE_SWIG_CONSTRUCTOR(info, svn_info_dup) +DECLARE_SWIG_CONSTRUCTOR(commit_info, svn_commit_info_dup) static PyObject *convert_log_changed_path(void *value, void *ctx, PyObject *py_pool) @@ -2159,3 +2160,37 @@ *baton = py_callbacks; } + +svn_error_t *svn_swig_py_commit_callback2(const svn_commit_info_t *commit_info, + void *baton, + apr_pool_t *pool) +{ + PyObject *receiver = baton; + PyObject *result; + svn_error_t *err = SVN_NO_ERROR; + + if ((receiver == NULL) || (receiver == Py_None)) + return SVN_NO_ERROR; + + svn_swig_py_acquire_py_lock(); + + if ((result = PyObject_CallFunction(receiver, + (char *)"O&O&", + make_ob_commit_info, commit_info, + make_ob_pool, pool)) == NULL) + { + err = callback_exception_error(); + } + else + { + if (result != Py_None) + err = callback_bad_return_error("Not None"); + Py_DECREF(result); + } + + svn_swig_py_release_py_lock(); + + return err; +} + + Index: subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h =================================================================== --- subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h (revision 19715) +++ subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h (working copy) @@ -316,7 +316,12 @@ void **baton, PyObject *py_callbacks, apr_pool_t *pool); +SVN_SWIG_SWIGUTIL_EXPORT +svn_error_t *svn_swig_py_commit_callback2(const svn_commit_info_t *commit_info, + void *baton, + apr_pool_t *pool); + #ifdef __cplusplus } #endif /* __cplusplus */ Index: subversion/bindings/swig/include/svn_types.swg =================================================================== --- subversion/bindings/swig/include/svn_types.swg (revision 19715) +++ subversion/bindings/swig/include/svn_types.swg (working copy) @@ -444,6 +444,12 @@ svn_swig_rb_set_baton($result, (VALUE)$2); }; +%typemap(python, in) (svn_commit_callback2_t callback, void *callback_baton) +{ + $1 = svn_swig_py_commit_callback2; + $2 = (void *)$input; +} + /* ----------------------------------------------------------------------- Callback: svn_cancel_func_t */ Index: subversion/bindings/swig/svn_delta.i =================================================================== --- subversion/bindings/swig/svn_delta.i (revision 19715) +++ subversion/bindings/swig/svn_delta.i (working copy) @@ -64,13 +64,6 @@ thunk editors for the various language bindings. */ -#ifdef SWIGPYTHON -void svn_swig_py_make_editor(const svn_delta_editor_t **editor, - void **edit_baton, - PyObject *py_editor, - apr_pool_t *pool); -#endif - %typemap(perl5, in) (const svn_delta_editor_t *editor, void *edit_baton) { svn_delta_make_editor(&$1, &$2, $input, _global_pool); }