You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by da...@apache.org on 2012/02/07 18:44:44 UTC

svn commit: r1241530 - in /subversion/trunk: subversion/bindings/swig/include/ subversion/bindings/swig/python/libsvn_swig_py/ subversion/bindings/swig/python/tests/ tools/examples/

Author: danielsh
Date: Tue Feb  7 17:44:43 2012
New Revision: 1241530

URL: http://svn.apache.org/viewvc?rev=1241530&view=rev
Log:
Fix the python bindings for svn_auth_get_platform_specific_client_providers.

The bindings were present, but due to a missing argout typemap for
apr_array_header_t **providers, they threw a not implemented error. This
was fixed for perl in r1035745, but was still broken for python and
ruby.  (The ruby bindings will be fixed in a separate commit.)

[in subversion/bindings/swig]

* include/svn_containers.swg
  (apr_array_header_t **RANGELIST):
    Track rename.
  (apr_array_header_t **providers):
    New SWIGPYTHON typemap.

* python/libsvn_swig_py/swigutil_py.c
  (convert_rangelist): Rename to..
  (convert_pointerlist): .. this.
    Use 'void *' instead of a concrete pointer type for the array elements.
  (svn_swig_py_ranglist_to_list): Rename to..
  (svn_swig_py_pointerlist_to_list): .. this.
  (svn_swig_py_mergeinfo_to_dict):
    Track renames.

* python/libsvn_swig_py/swigutil_py.h
  (svn_swig_py_ranglist_to_list): Rename to..
  (svn_swig_py_pointerlist_to_list): .. this.

* python/test/client.py
  (test_platform_providers): Add testcase.

* tools/examples/get-location-segments.py
  (main): Use svn_auth_get_platform_specific_client_providers.

Patch by: Matthijs Kooijman <ma...@stdin.nl>

Modified:
    subversion/trunk/subversion/bindings/swig/include/svn_containers.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/client.py
    subversion/trunk/tools/examples/get-location-segments.py

Modified: subversion/trunk/subversion/bindings/swig/include/svn_containers.swg
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/swig/include/svn_containers.swg?rev=1241530&r1=1241529&r2=1241530&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/swig/include/svn_containers.swg (original)
+++ subversion/trunk/subversion/bindings/swig/include/svn_containers.swg Tue Feb  7 17:44:43 2012
@@ -825,8 +825,8 @@
 #ifdef SWIGPYTHON
 %typemap(argout) apr_array_header_t **RANGELIST {
   %append_output
-    (svn_swig_py_rangelist_to_list(*$1, $descriptor(svn_merge_range_t *),
-                                   _global_py_pool));
+    (svn_swig_py_pointerlist_to_list(*$1, $descriptor(svn_merge_range_t *),
+                                     _global_py_pool));
   if (PyErr_Occurred()) {
     SWIG_fail;
   }
@@ -873,3 +873,14 @@
                     $descriptor(svn_auth_provider_object_t *)));
 }
 #endif
+
+#ifdef SWIGPYTHON
+%typemap(argout) apr_array_header_t **providers {
+  %append_output
+    (svn_swig_py_pointerlist_to_list(*$1, $descriptor(svn_auth_provider_object_t *),
+                                     _global_py_pool));
+  if (PyErr_Occurred()) {
+    SWIG_fail;
+  }
+}
+#endif

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=1241530&r1=1241529&r2=1241530&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 Tue Feb  7 17:44:43 2012
@@ -650,7 +650,7 @@ PyObject *svn_swig_py_stringhash_to_dict
   return convert_hash(hash, convert_string, NULL, NULL);
 }
 
-static PyObject *convert_rangelist(void *value, void *ctx, PyObject *py_pool)
+static PyObject *convert_pointerlist(void *value, void *ctx, PyObject *py_pool)
 {
   int i;
   PyObject *list;
@@ -662,11 +662,11 @@ static PyObject *convert_rangelist(void 
 
   for (i = 0; i < array->nelts; i++)
     {
-      svn_merge_range_t *range = APR_ARRAY_IDX(array, i, svn_merge_range_t *);
+      void *ptr = APR_ARRAY_IDX(array, i, void *);
       PyObject *obj;
       int result;
 
-      obj = convert_to_swigtype(range, ctx, py_pool);
+      obj = convert_to_swigtype(ptr, ctx, py_pool);
       if (obj == NULL)
         goto error;
 
@@ -681,18 +681,18 @@ static PyObject *convert_rangelist(void 
   return NULL;
 }
 
-PyObject *svn_swig_py_rangelist_to_list(apr_array_header_t *rangelist,
-                                        swig_type_info *type,
-                                        PyObject *py_pool)
+PyObject *svn_swig_py_pointerlist_to_list(apr_array_header_t *list,
+                                          swig_type_info *type,
+                                          PyObject *py_pool)
 {
-  return convert_rangelist(rangelist, type, py_pool);
+  return convert_pointerlist(list, type, py_pool);
 }
 
 PyObject *svn_swig_py_mergeinfo_to_dict(apr_hash_t *hash,
                                         swig_type_info *type,
                                         PyObject *py_pool)
 {
-  return convert_hash(hash, convert_rangelist, type, py_pool);
+  return convert_hash(hash, convert_pointerlist, type, py_pool);
 }
 
 static PyObject *convert_mergeinfo_hash(void *value, void *ctx,

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=1241530&r1=1241529&r2=1241530&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 Tue Feb  7 17:44:43 2012
@@ -135,9 +135,9 @@ PyObject *svn_swig_py_locationhash_to_di
 /* helper function to convert an apr_array_header_t* (of
    svn_merge_range_t *) to a Python list */
 SVN_SWIG_SWIGUTIL_EXPORT
-PyObject *svn_swig_py_rangelist_to_list(apr_array_header_t *rangelist,
-                                        swig_type_info *type,
-                                        PyObject *py_pool);
+PyObject *svn_swig_py_pointerlist_to_list(apr_array_header_t *list,
+                                          swig_type_info *type,
+                                          PyObject *py_pool);
 
 /* helper function to convert an apr_hash_t* (const char *->array of
    svn_merge_range_t *) to a Python dict */

Modified: subversion/trunk/subversion/bindings/swig/python/tests/client.py
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/swig/python/tests/client.py?rev=1241530&r1=1241529&r2=1241530&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/swig/python/tests/client.py (original)
+++ subversion/trunk/subversion/bindings/swig/python/tests/client.py Tue Feb  7 17:44:43 2012
@@ -374,6 +374,11 @@ class SubversionClientTestCase(unittest.
 
     self.assertEqual(readme_text, 'This is a test.\n')
 
+  def test_platform_providers(self):
+    providers = core.svn_auth_get_platform_specific_client_providers(None, None)
+    # Not much more we can test in this minimal environment.
+    self.assert_(isinstance(providers, list))
+
 def suite():
     return unittest.defaultTestLoader.loadTestsFromTestCase(
       SubversionClientTestCase)

Modified: subversion/trunk/tools/examples/get-location-segments.py
URL: http://svn.apache.org/viewvc/subversion/trunk/tools/examples/get-location-segments.py?rev=1241530&r1=1241529&r2=1241530&view=diff
==============================================================================
--- subversion/trunk/tools/examples/get-location-segments.py (original)
+++ subversion/trunk/tools/examples/get-location-segments.py Tue Feb  7 17:44:43 2012
@@ -125,7 +125,13 @@ ERROR: %s
 
   core.svn_config_ensure(None)
   ctx = client.svn_client_create_context()
-  providers = [
+
+  # Make sure that these are at the start of the list, so passwords from
+  # gnome-keyring / kwallet are checked before asking for new passwords.
+  # Note that we don't pass our config here, since we can't seem to access
+  # ctx.config.config (ctx.config is opaque).
+  providers = core.svn_auth_get_platform_specific_client_providers(None, None)
+  providers.extend([
     client.get_simple_provider(),
     core.svn_auth_get_ssl_server_trust_file_provider(),
     core.svn_auth_get_simple_prompt_provider(prompt_func_simple_prompt, 2),
@@ -134,7 +140,8 @@ ERROR: %s
     client.get_ssl_server_trust_file_provider(),
     client.get_ssl_client_cert_file_provider(),
     client.get_ssl_client_cert_pw_file_provider(),
-    ]
+  ])
+
   ctx.auth_baton = core.svn_auth_open(providers)
   ctx.config = core.svn_config_get_config(None)