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)