You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rd...@apache.org on 2010/08/07 01:37:43 UTC

svn commit: r983144 - in /subversion/trunk/subversion/bindings/swig: python/libsvn_swig_py/swigutil_py.c python/libsvn_swig_py/swigutil_py.h python/tests/delta.py svn_delta.i

Author: rdonch
Date: Fri Aug  6 23:37:43 2010
New Revision: 983144

URL: http://svn.apache.org/viewvc?rev=983144&view=rev
Log:
As a (hopefully) final follow-up to r981683, set the parent pool correctly
on the returned op object proxies.

[in subversion/bindings/swig]

* python/libsvn_swig_py/swigutil_py.c,
  python/libsvn_swig_py/swigutil_py.h:
  (svn_swig_py_txdelta_window_t_ops_get): Add a new parameter for the pool to
    use when wrapping the op objects.

* svn_delta.i:
  (svn_txdelta_window_t_ops_get): Retrieve the parent pool for the window
    object and pass it to svn_swig_py_txdelta_window_t_ops_get.

* python/tests/delta.py:
  (DeltaTestCase.testTxdeltaWindowT): Add a new assertion to ensure the above
    works.


Modified:
    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/delta.py
    subversion/trunk/subversion/bindings/swig/svn_delta.i

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=983144&r1=983143&r2=983144&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 Aug  6 23:37:43 2010
@@ -4073,14 +4073,16 @@ svn_swig_py_setup_wc_diff_callbacks2(voi
 
 PyObject *
 svn_swig_py_txdelta_window_t_ops_get(svn_txdelta_window_t *window,
-                                     swig_type_info * op_type_info)
+                                     swig_type_info * op_type_info,
+                                     PyObject *window_pool)
 {
   PyObject *result = PyList_New(window->num_ops);
   int i;
   
   for (i = 0; i < window->num_ops; ++i)
       PyList_SET_ITEM(result, i,
-                      SWIG_NewPointerObj(window->ops + i, op_type_info, 0));
+                      svn_swig_NewPointerObj(window->ops + i, op_type_info,
+                                             window_pool, NULL));
 
   return result;
 }

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=983144&r1=983143&r2=983144&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 Aug  6 23:37:43 2010
@@ -510,11 +510,14 @@ extern const svn_ra_reporter2_t swig_py_
 
 /* Get a list of ops from a window. Used to replace the naive
    svn_txdelta_window_t.ops accessor. op_type_info is supposed to be
-   the SWIG descriptor of "svn_txdelta_op_t *". */
+   the SWIG descriptor of "svn_txdelta_op_t *". window_pool is supposed
+   to be the pool associated with the window proxy and used for wrapping
+   the op objects. */
 SVN_SWIG_SWIGUTIL_EXPORT
 PyObject *
 svn_swig_py_txdelta_window_t_ops_get(svn_txdelta_window_t *window,
-                                     swig_type_info * op_type_info);
+                                     swig_type_info * op_type_info,
+                                     PyObject *window_pool);
 
 #ifdef __cplusplus
 }

Modified: subversion/trunk/subversion/bindings/swig/python/tests/delta.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/swig/python/tests/delta.py?rev=983144&r1=983143&r2=983144&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/swig/python/tests/delta.py (original)
+++ subversion/trunk/subversion/bindings/swig/python/tests/delta.py Fri Aug  6 23:37:43 2010
@@ -62,6 +62,9 @@ class DeltaTestCase(unittest.TestCase):
     self.assertEqual(window.src_ops, len([op for op in window.ops
       if op.action_code == svn.delta.svn_txdelta_source]))
 
+    # Check that the ops inherit the window's pool
+    self.assertEqual(window.ops[0]._parent_pool, window._parent_pool)
+
 def suite():
   return unittest.defaultTestLoader.loadTestsFromTestCase(DeltaTestCase)
 

Modified: subversion/trunk/subversion/bindings/swig/svn_delta.i
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/swig/svn_delta.i?rev=983144&r1=983143&r2=983144&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/swig/svn_delta.i (original)
+++ subversion/trunk/subversion/bindings/swig/svn_delta.i Fri Aug  6 23:37:43 2010
@@ -179,7 +179,7 @@ static PyObject *
 svn_txdelta_window_t_ops_get(PyObject *window_ob)
 {
   void *window;
-  PyObject * ops_list;
+  PyObject *ops_list, *window_pool;
   int status;
   
   /* Kludge alert!
@@ -209,8 +209,16 @@ svn_txdelta_window_t_ops_get(PyObject *w
       return NULL;
     }
     
+  window_pool = PyObject_GetAttrString(window_ob, "_parent_pool");
+
+  if (window_pool == NULL)
+    {
+      svn_swig_py_release_py_lock();
+      return NULL;
+    }
+    
   ops_list = svn_swig_py_txdelta_window_t_ops_get(window,
-    SWIG_TypeQuery("svn_txdelta_op_t *"));
+    SWIG_TypeQuery("svn_txdelta_op_t *"), window_pool);
     
   svn_swig_py_release_py_lock();