On 14.03.2018 04:24, Troy Curtis Jr wrote: > On Tue, Mar 13, 2018 at 9:44 AM Julian Foad <julianf...@apache.org> wrote: > >> Troy (or others), I want to use swig-py bindings for my new shelving API >> (in svn_client.h) so I am trying to update them. I started by looking at >> the 'Missing argout typemap' warnings for svn_client.h. >> >> As well as svn_shelf_* functions, also the svn_client_conflict_* set of >> functions currently lack bindings so I thought I might as well try to do >> those at the same time. >> >> First some easy bits: >> >> [[[ >> Index: subversion/bindings/swig/include/svn_containers.swg >> =================================================================== >> --- subversion/bindings/swig/include/svn_containers.swg (revision 1826621) >> +++ subversion/bindings/swig/include/svn_containers.swg (working copy) >> @@ -527,7 +527,10 @@ >> apr_array_header_t **logfiles, >> apr_array_header_t **names_p, >> apr_array_header_t **targets_p, >> - apr_array_header_t **args_p >> + apr_array_header_t **args_p, >> + apr_array_header_t **possible_moved_to_repos_relpaths, >> + apr_array_header_t **possible_moved_to_abspaths, >> + apr_array_header_t **props_conflicted >> }; >> >> /* >> ----------------------------------------------------------------------- >> Index: subversion/bindings/swig/include/svn_types.swg >> =================================================================== >> --- subversion/bindings/swig/include/svn_types.swg (revision 1826621) >> +++ subversion/bindings/swig/include/svn_types.swg (working copy) >> @@ -119,6 +119,11 @@ >> svn_client_commit_info_t **, >> svn_client_ctx_t **, >> const svn_client_commit_item3_t **, >> + svn_client_conflict_t **, >> + svn_client_conflict_option_t **, >> + svn_client_shelf_t **, >> + svn_client_shelf_version_t **, >> + svn_client_shelf_info_t **, >> /* svn_delta */ >> const svn_delta_editor_t **, >> svn_txdelta_stream_t **, >> ]]] >> >> Now the harder ones. >> >> subversion/include/svn_client.h:4793: Warning 900: FIXME: Missing argout >> typemap >> subversion/include/svn_client.h:4806: Warning 900: FIXME: Missing argout >> typemap >> subversion/include/svn_client.h:4823: Warning 900: FIXME: Missing argout >> typemap >> >> These three all look like: >> >> svn_client_conflict_text_get_resolution_options( >> apr_array_header_t **options, >> >> an array of pointer to svn_client_conflict_option_t which is an opaque >> object. >> >> I can see an "%opaque_proxy(svn_client_conflict_t);" declaration has >> already been produced in 'proxy/svn_client_h.swg'. What more is needed? >> >> subversion/include/svn_client.h:7028: Warning 900: FIXME: Missing argout >> typemap >> >> svn_client_shelf_get_all_versions(apr_array_header_t **versions_p, >> >> an array of pointer to svn_client_shelf_version_t which is a public >> non-opaque struct. >> >> subversion/include/svn_client.h:7079: Warning 900: FIXME: Missing argout >> typemap >> subversion/include/svn_client.h:7176: Warning 900: FIXME: Missing argout >> typemap >> subversion/include/svn_client.h:7201: Warning 900: FIXME: Missing argout >> typemap >> >> And so on. >> >> Any help would be appreciated! >> >> > Updating the bindings for some of the newer APIs has been something I've > been wanting to get to. I'm not proficient enough in swig-ese to just > rattle it off the top of my head yet, but I'd be interested in helping > out. I may actually have some time to poke at Friday depending on how life > goes :) So if you or someone else hasn't figured it out by then I'll plan > on taking a look.
For anyone who wants to work on updating the bindings: note that we have a lot of language-specific stuff in there that's a consequence of Swig 1 not knowing any better back in the day. Most of those typemaps can be made language-independent (thus reducing the size of the Swig files) with features from Swig 2 and especially 3, which introduced built-in constructs for handling various kinds of data structures that we're currently mapping separately for each target language. -- Brane