Author: futatuki
Date: Fri Dec 20 14:24:42 2019
New Revision: 1871861

URL: http://svn.apache.org/viewvc?rev=1871861&view=rev
Log:
Fix implementation of svn_client_status_func_t function for swig-py 

* subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h
 (svn_swig_py_client_status_func): Fix type from void to svn_error_t *.
* subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
 (svn_swig_py_client_status_func): Fix type from void to svn_error_t *.
 - Remove the code to save/restore Python Error context.
 - Remove the code to clear C API error status
 - Return error status as it is

Reported by: stsp

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

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=1871861&r1=1871860&r2=1871861&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 Dec 20 14:24:42 2019
@@ -3041,10 +3041,10 @@ void svn_swig_py_status_func(void *baton
   svn_swig_py_release_py_lock();
 }
 
-void svn_swig_py_client_status_func(void *baton,
-                                    const char *path,
-                                    const svn_client_status_t *status,
-                                    apr_pool_t *scratch_pool)
+svn_error_t *svn_swig_py_client_status_func(void *baton,
+                                            const char *path,
+                                            const svn_client_status_t *status,
+                                            apr_pool_t *scratch_pool)
 {
   PyObject *function = baton;
   PyObject *result;
@@ -3052,15 +3052,10 @@ void svn_swig_py_client_status_func(void
   PyObject *exc, *exc_type, *exc_traceback;
 
   if (function == NULL || function == Py_None)
-    return;
+    return err;
 
   svn_swig_py_acquire_py_lock();
 
-  /* As caller can't understand Python context and we can't notify if
-     Python call back function raise exception to caller, we must catch it
-     if it is occurred, and restore error indicator */
-  PyErr_Fetch(&exc_type, &exc, &exc_traceback);
-
   if (status == NULL)
     {
       result = PyObject_CallFunction(function,
@@ -3096,13 +3091,8 @@ void svn_swig_py_client_status_func(void
       Py_DECREF(result);
     }
 
-  /* Our error has no place to go. :-( */
-  svn_error_clear(err);
-
-  /* Also, restore error indicator */
-  PyErr_Restore(exc_type, exc, exc_traceback);
-
   svn_swig_py_release_py_lock();
+  return err;
 }
 
 

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=1871861&r1=1871860&r2=1871861&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 Dec 20 14:24:42 2019
@@ -315,10 +315,10 @@ void svn_swig_py_status_func(void *baton
 
 /* a client status function that executes a Python function that is passed in
    via the baton argument */
-void svn_swig_py_client_status_func(void *baton,
-                                    const char *path,
-                                    const svn_client_status_t *status,
-                                    apr_pool_t *scratch_pool);
+svn_error_t *svn_swig_py_client_status_func(void *baton,
+                                            const char *path,
+                                            const svn_client_status_t *status,
+                                            apr_pool_t *scratch_pool);
 
 /* a svn_delta_path_driver callback that executes a Python function
   that is passed in via the baton argument */


Reply via email to