As suggested by beazley, this basically works (a few const issues, but
these are our fault, not SWIG's). Suit to taste.
Index: svn_string.i
===================================================================
--- svn_string.i
+++ svn_string.i 2002-09-01 15:55:13.000000000 -0400
@@ -52,11 +52,9 @@
PyErr_SetString(PyExc_TypeError, "not a string");
return NULL;
}
-%#error need pool argument from somewhere
$1 = svn_stringbuf_ncreate(PyString_AS_STRING($input),
PyString_GET_SIZE($input),
- /* ### gah... what pool to use? */
- pool);
+ _global_pool);
}
%typemap(python,out) svn_stringbuf_t * {
@@ -64,7 +62,7 @@
}
/* svn_stringbuf_t ** is always an output parameter */
-%typemap(ignore) svn_stringbuf_t ** (svn_stringbuf_t *temp) {
+%typemap(python) svn_stringbuf_t ** (svn_stringbuf_t *temp) {
$1 = &temp;
}
%apply RET_STRING { svn_stringbuf_t ** };
@@ -92,8 +90,7 @@
/* when storing an svn_string_t* into a structure, we must allocate the
svn_string_t structure on the heap. */
%typemap(python,memberin) const svn_string_t * {
-%#error need pool argument from somewhere
- $1 = svn_string_dup($input, pool);
+ $1 = svn_string_dup($input, _global_pool);
}
%typemap(python,out) svn_string_t * {
@@ -101,7 +98,7 @@
}
/* svn_string_t ** is always an output parameter */
-%typemap(ignore) svn_string_t ** (svn_string_t *temp) {
+%typemap(python) svn_string_t ** (svn_string_t *temp) {
$1 = &temp;
}
%apply RET_STRING { svn_string_t ** };
@@ -113,7 +110,7 @@
*/
/* ### note that SWIG drops the const in the arg decl, so we must cast
*/
-%typemap(ignore) const char **OUTPUT (const char *temp) {
+%typemap(python) const char **OUTPUT (const char *temp) {
$1 = (char **)&temp;
}
%typemap(python,argout) const char **OUTPUT {
@@ -133,10 +130,14 @@
/*
-----------------------------------------------------------------------
define a general INPUT param of an array of svn_stringbuf_t* items.
*/
-
+%typemap(arginit) apr_pool_t *pool(apr_pool_t *_global_pool) {
+SWIG_ConvertPtr(PyObject_GetItem(args, PyInt_FromLong($argnum)), (void
**)&$1, SWIGTYPE_p_apr_pool_t, SWIG_POINTER_EXCEPTION | 0);
+_global_pool = $1;
+}
+%typemap (in) apr_pool_t *pool "";
%typemap(python,in) const apr_array_header_t *STRINGLIST {
-%#error need pool argument from somewhere
- $1 = svn_swig_py_strings_to_array($input, NULL);
+
+ $1 = svn_swig_py_strings_to_array($input, _global_pool);
if ($1 == NULL)
return NULL;
}
Index: svn_fs.i
===================================================================
--- svn_fs.i
+++ svn_fs.i 2002-09-01 15:58:17.000000000 -0400
@@ -69,7 +69,7 @@
list_transaction's "apr_array_header_t **" is returning a list of
strings
*/
-%typemap(ignore) apr_array_header_t ** (apr_array_header_t *temp) {
+%typemap(python) apr_array_header_t ** (apr_array_header_t *temp) {
$1 = &temp;
}
%typemap(python, argout) apr_array_header_t ** {
Index: svn_wc.i
===================================================================
--- svn_wc.i
+++ svn_wc.i 2002-09-01 16:00:00.000000000 -0400
@@ -24,12 +24,6 @@
%import svn_string.i
%import svn_delta.i
-/*
-----------------------------------------------------------------------
- ### these functions require a pool, which we don't have immediately
- ### handy. just eliminate these funcs for now.
-*/
-%ignore svn_wc_set_auth_file;
-
/* ### ignore this structure because the accessors will need a pool */
%ignore svn_wc_keywords_t;
Index: svn_client.i
===================================================================
--- svn_client.i
+++ svn_client.i 2002-09-01 16:00:44.000000000 -0400
@@ -29,11 +29,6 @@
*/
%ignore svn_client_proplist_item_s;
-/* ### these take an 'apr_array_header_t *' which requires a pool,
which
- ### we don't have immediately handy. just eliminate these funcs for
now. */
-%ignore svn_client_commit;
-%ignore svn_client_log;
-%ignore svn_client_diff;
/*
-----------------------------------------------------------------------
all "targets" and "diff_options" arrays are constant inputs of
@@ -67,7 +62,7 @@
handle the return value for svn_client_proplist()
*/
-%typemap(ignore) apr_array_header_t ** (apr_array_header_t *temp) {
+%typemap(python) apr_array_header_t ** (apr_array_header_t *temp) {
$1 = &temp;
}
%typemap(python,argout) apr_array_header_t ** {
@@ -102,13 +97,13 @@
/*
-----------------------------------------------------------------------
handle the "statushash" OUTPUT param for svn_client_status()
*/
-%typemap(ignore) apr_hash_t **statushash = apr_hash_t **OUTPUT;
%typemap(python,argout) apr_hash_t **statushash {
$result = t_output_helper(
$result,
svn_swig_py_convert_hash(*$1, SWIGTYPE_p_svn_wc_status_t));
}
+/*%typemap(python) apr_hash_t **statushash = apr_hash_t **OUTPUT;*/
/*
-----------------------------------------------------------------------
We use 'svn_wc_status_t *' in some custom code, but it isn't in the
API anywhere. Thus, SWIG doesn't generate a typemap entry for it. by
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@subversion.tigris.org
For additional commands, e-mail: dev-help@subversion.tigris.org
Received on Sun Sep 1 22:06:12 2002