Author: cmpilato
Date: Fri Apr  5 18:37:24 2013
New Revision: 1465089

URL: http://svn.apache.org/r1465089
Log:
Fix svn_auth_cleanup_walk()'s SWIG-Python manifestation.

* subversion/bindings/swig/core.i
  Add typemap for svn_auth_cleanup_func_t/baton pair.

* subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.h,
* subversion/bindings/swig/python/libsvn_swig_py/swigutil_py.c
  (svn_swig_py_auth_cleanup_func): New function.

Modified:
    subversion/trunk/subversion/bindings/swig/core.i
    
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/core.i
URL: 
http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/swig/core.i?rev=1465089&r1=1465088&r2=1465089&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/swig/core.i (original)
+++ subversion/trunk/subversion/bindings/swig/core.i Fri Apr  5 18:37:24 2013
@@ -705,6 +705,15 @@ svn_swig_pl_set_current_pool (apr_pool_t
 %authprompt_callback_typemap(ssl_client_cert_pw)
 %authprompt_callback_typemap(gnome_keyring_unlock)
 
+#ifdef SWIGPYTHON
+/* pl and rb aren't yet implemented */
+%callback_typemap_maybenull(svn_auth_cleanup_func_t cleanup_func,
+                            void *cleanup_baton,
+                            svn_swig_py_auth_cleanup_func,
+                            svn_swig_pl_auth_cleanup_func,
+                            svn_swig_rb_auth_cleanup_func)
+#endif
+
 /* -----------------------------------------------------------------------
  * For all the various functions that set a callback baton create a reference
  * for the baton (which in this case is an SV pointing to the callback)

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=1465089&r1=1465088&r2=1465089&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 18:37:24 2013
@@ -3284,6 +3284,57 @@ svn_swig_py_auth_ssl_client_cert_pw_prom
   return err;
 }
 
+svn_error_t *
+svn_swig_py_auth_cleanup_func(svn_boolean_t *delete_cred,
+                              void *cleanup_baton,
+                              const char *cred_kind,
+                              const char *realmstring,
+                              const char *provider,
+                              apr_pool_t *scratch_pool)
+{
+  PyObject *function = cleanup_baton;
+  PyObject *result;
+  PyObject *py_scratch_pool;
+  svn_error_t *err = SVN_NO_ERROR;
+
+  *delete_cred = FALSE;
+
+  if (function == NULL || function == Py_None)
+    return SVN_NO_ERROR;
+
+  svn_swig_py_acquire_py_lock();
+
+  py_scratch_pool = make_ob_pool(scratch_pool);
+  if (py_scratch_pool == NULL)
+    {
+      err = callback_exception_error();
+      goto finished;
+    }
+
+  if ((result = PyObject_CallFunction(function,
+                                      (char *)"sssO",
+                                      cred_kind, realmstring,
+                                      provider, py_scratch_pool)) == NULL)
+    {
+      err = callback_exception_error();
+    }
+  else
+    {
+      if (PyInt_Check(result))
+        *delete_cred = PyInt_AsLong(result) ? TRUE : FALSE;
+      else if (PyLong_Check(result))
+        *delete_cred = PyLong_AsLong(result) ? TRUE : FALSE;
+      else
+        err = callback_bad_return_error("Not an integer");
+      Py_DECREF(result);
+    }
+  Py_DECREF(py_scratch_pool);
+  
+finished:
+  svn_swig_py_release_py_lock();
+  return err;
+}
+
 /* svn_ra_callbacks_t */
 static svn_error_t *
 ra_callbacks_open_tmp_file(apr_file_t **fp,

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=1465089&r1=1465088&r2=1465089&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 18:37:24 2013
@@ -501,6 +501,15 @@ svn_error_t *svn_swig_py_auth_ssl_client
     svn_boolean_t may_save,
     apr_pool_t *pool);
 
+/* auth cleanup callback */
+SVN_SWIG_SWIGUTIL_EXPORT
+svn_error_t *svn_swig_py_auth_cleanup_func(svn_boolean_t *delete_cred,
+                                           void *cleanup_baton,
+                                           const char *cred_kind,
+                                           const char *realmstring,
+                                           const char *provider,
+                                           apr_pool_t *scratch_pool);
+
 SVN_SWIG_SWIGUTIL_EXPORT
 void
 svn_swig_py_setup_ra_callbacks(svn_ra_callbacks2_t **callbacks,


Reply via email to