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)


Reply via email to