Author: philip
Date: Fri Apr 5 12:14:57 2013
New Revision: 1464939
URL: http://svn.apache.org/r1464939
Log:
Add SWIG python support for svn_repos_freeze.
* subversion/include/svn_repos.h
(typedef svn_repos_freeze_func_t): New.
(svn_repos_freeze): Use typedef.
* subversion/libsvn_repos/repos.c
(struct freeze_baton_t, svn_repos_freeze): Use typedef.
* subversion/svnadmin/svnadmin.c
(freeze_body): Add comment.
* subversion/bindings/swig/include/svn_types.swg
(svn_repos_freeze_func_t): New.
* subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h
* subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
(svn_swig_py_repos_freeze_func): New.
* subversion/bindings/swig/python/tests/repository.py
(setUp): Store repository path.
(freeze_body): New callback.
(test_freeze): New test.
Modified:
subversion/trunk/subversion/bindings/swig/include/svn_types.swg
subversion/trunk/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
subversion/trunk/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h
subversion/trunk/subversion/bindings/swig/python/tests/repository.py
subversion/trunk/subversion/include/svn_repos.h
subversion/trunk/subversion/libsvn_repos/repos.c
subversion/trunk/subversion/svnadmin/svnadmin.c
Modified: subversion/trunk/subversion/bindings/swig/include/svn_types.swg
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/swig/include/svn_types.swg?rev=1464939&r1=1464938&r2=1464939&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/swig/include/svn_types.swg (original)
+++ subversion/trunk/subversion/bindings/swig/include/svn_types.swg Fri Apr 5
12:14:57 2013
@@ -906,6 +906,17 @@ svn_ ## TYPE ## _swig_rb_closed(VALUE se
#endif
/* -----------------------------------------------------------------------
+ Callback: svn_repos_freeze_func_t
+*/
+#ifdef SWIGPYTHON
+%typemap(in) (svn_repos_freeze_func_t freeze_body, void *baton)
+{
+ $1 = svn_swig_py_repos_freeze_func;
+ $2 = (void *)$input;
+}
+#endif
+
+/* -----------------------------------------------------------------------
Callback: svn_proplist_receiver2_t
*/
#ifdef SWIGPYTHON
Modified:
subversion/trunk/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c?rev=1464939&r1=1464938&r2=1464939&view=diff
==============================================================================
---
subversion/trunk/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
(original)
+++
subversion/trunk/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
Fri Apr 5 12:14:57 2013
@@ -2645,6 +2645,44 @@ svn_error_t *svn_swig_py_repos_history_f
return err;
}
+svn_error_t *svn_swig_py_repos_freeze_func(void *baton,
+ apr_pool_t *pool)
+{
+ PyObject *receiver = baton;
+ PyObject *py_pool;
+ 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();
+
+ py_pool = make_ob_pool(pool);
+ if (py_pool == NULL)
+ {
+ err = callback_exception_error();
+ goto finished;
+ }
+
+ result = PyObject_CallFunction(receiver, (char *)"O", py_pool);
+ if (result == NULL)
+ {
+ err = callback_exception_error();
+ }
+ else
+ {
+ if (result != Py_None)
+ err = callback_bad_return_error("Not None");
+ Py_DECREF(result);
+ }
+
+ Py_DECREF(py_pool);
+
+finished:
+ svn_swig_py_release_py_lock();
+ return err;
+}
svn_error_t *svn_swig_py_proplist_receiver2(void *baton,
const char *path,
Modified:
subversion/trunk/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h?rev=1464939&r1=1464938&r2=1464939&view=diff
==============================================================================
---
subversion/trunk/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h
(original)
+++
subversion/trunk/subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h
Fri Apr 5 12:14:57 2013
@@ -406,6 +406,11 @@ svn_error_t *svn_swig_py_log_entry_recei
svn_log_entry_t *log_entry,
apr_pool_t *pool);
+/* thunked freeze function */
+SVN_SWIG_SWIGUTIL_EXPORT
+svn_error_t *svn_swig_py_repos_freeze_func(void *baton,
+ apr_pool_t *pool);
+
/* thunked proplist receiver2 function */
SVN_SWIG_SWIGUTIL_EXPORT
svn_error_t *svn_swig_py_proplist_receiver2(void *baton,
Modified: subversion/trunk/subversion/bindings/swig/python/tests/repository.py
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/swig/python/tests/repository.py?rev=1464939&r1=1464938&r2=1464939&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/swig/python/tests/repository.py
(original)
+++ subversion/trunk/subversion/bindings/swig/python/tests/repository.py Fri
Apr 5 12:14:57 2013
@@ -54,7 +54,7 @@ class SubversionRepositoryTestCase(unitt
def setUp(self):
"""Load a Subversion repository"""
self.temper = utils.Temper()
- (self.repos, _, _) = self.temper.alloc_known_repo(
+ (self.repos, self.repos_path, _) = self.temper.alloc_known_repo(
'trac/versioncontrol/tests/svnrepos.dump', suffix='-repository')
self.fs = repos.fs(self.repos)
self.rev = fs.youngest_rev(self.fs)
@@ -198,6 +198,16 @@ class SubversionRepositoryTestCase(unitt
_authz_callback),
"Youngest revision")
+ def freeze_body(self, pool):
+ self.freeze_invoked += 1
+
+ def test_freeze(self):
+ """Test repository freeze"""
+
+ self.freeze_invoked = 0
+ repos.freeze([self.repos_path], self.freeze_body)
+ self.assertEqual(self.freeze_invoked, 1)
+
def suite():
return unittest.defaultTestLoader.loadTestsFromTestCase(
SubversionRepositoryTestCase)
Modified: subversion/trunk/subversion/include/svn_repos.h
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/include/svn_repos.h?rev=1464939&r1=1464938&r2=1464939&view=diff
==============================================================================
--- subversion/trunk/subversion/include/svn_repos.h (original)
+++ subversion/trunk/subversion/include/svn_repos.h Fri Apr 5 12:14:57 2013
@@ -662,6 +662,13 @@ svn_repos_recover(const char *path,
apr_pool_t *pool);
/**
+ * Callback for svn_repos_freeze.
+ *
+ * @since New in 1.8.
+ */
+typedef svn_error_t *(*svn_repos_freeze_func_t)(void *baton, apr_pool_t *pool);
+
+/**
* Take an exclusive lock on each of the repositories in @a paths to
* prevent commits and then while holding all the locks invoke @a
* freeze_body passing @a baton. Each repository may be readable by
@@ -678,7 +685,7 @@ svn_repos_recover(const char *path,
*/
svn_error_t *
svn_repos_freeze(apr_array_header_t *paths,
- svn_error_t *(*freeze_body)(void *baton, apr_pool_t *pool),
+ svn_repos_freeze_func_t freeze_body,
void *baton,
apr_pool_t *pool);
Modified: subversion/trunk/subversion/libsvn_repos/repos.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_repos/repos.c?rev=1464939&r1=1464938&r2=1464939&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_repos/repos.c (original)
+++ subversion/trunk/subversion/libsvn_repos/repos.c Fri Apr 5 12:14:57 2013
@@ -1755,7 +1755,7 @@ svn_repos_recover4(const char *path,
struct freeze_baton_t {
apr_array_header_t *paths;
int counter;
- svn_error_t *(*freeze_body)(void *, apr_pool_t *);
+ svn_repos_freeze_func_t freeze_body;
void *baton;
};
@@ -1816,7 +1816,7 @@ multi_freeze(void *baton,
while frozen. */
svn_error_t *
svn_repos_freeze(apr_array_header_t *paths,
- svn_error_t *(*freeze_body)(void *, apr_pool_t *),
+ svn_repos_freeze_func_t freeze_body,
void *baton,
apr_pool_t *pool)
{
Modified: subversion/trunk/subversion/svnadmin/svnadmin.c
URL:
http://svn.apache.org/viewvc/subversion/trunk/subversion/svnadmin/svnadmin.c?rev=1464939&r1=1464938&r2=1464939&view=diff
==============================================================================
--- subversion/trunk/subversion/svnadmin/svnadmin.c (original)
+++ subversion/trunk/subversion/svnadmin/svnadmin.c Fri Apr 5 12:14:57 2013
@@ -1001,6 +1001,7 @@ struct freeze_baton_t {
int status;
};
+/* Implements svn_repos_freeze_func_t */
static svn_error_t *
freeze_body(void *baton,
apr_pool_t *pool)