Tino Schwarze <subversion.li...@tisc.de> писал в своём письме Thu, 25 Mar 2010 17:17:42 +0300:

Hi there,

Back to python: I managed to use the Python bindings to get a value from
the config file (I didn't want to reinvent the wheel) like this:

***
from svn import repos, fs, delta, core, client

def main(pool, repos_dir):

    # for now, store client configuration in repository root
    cfgfile = repos_dir+'/conf/client.conf'

    svncfg = core.svn_config_read (cfgfile, True, pool)

global_ignores = core.svn_config_get (svncfg, core.SVN_CONFIG_SECTION_GLOBAL, core.SVN_CONFIG_OPTION_GLOBAL_IGNORES, None)

***

Now I'd like to verify our default set of required MIME types, so I need
to get the contents of the [auto-props] section from the config file.

libsvn provides the following function which should be suitable for my
needs:

svn_config_enumerate2(svn_config_t cfg, char section,
svn_config_enumerator2_t callback, void baton, apr_pool_t pool) -> int

Two questions arise:

1. How do I define an appropiate callback in Python? Looking at the SWIG
documentation, I see examples on how to implement Python callbacks but
they don't seem to match the current SVN bindings. I tried passing a
Python method, deriving from svn_config_enumerator2_t etc. -> Segfault.

I took a look, and unfortunately this callback is not supported. The reason for that is that SWIG can't automatically figure out how to call Python callbacks, so a chunk of boring code must be written for each callback type - and I guess no developers needed to scratch this particular itch.

If it was supported, however, the call would look like this (and it *will* look like this, after I become un-busy again and implement it):

def enumerator(name, value, pool):
  print "%s: %s" % (name, value)

core.svn_config_enumerate2(svncfg, core.SVN_CONFIG_SECTION_AUTO_PROPS, enumerator)

2. What's the baton good for? Is it just some kind of additional data, I
don't need to care about?

The baton argument is used up by the bindings themselves, you neither should nor can supply your own (this applies to all callbacks).

Maybe the devel list is more appropiate for such questions, but I wanted
to try here first.

Not really, since this is a use question. 8=]

Thanks,

Tino.

Roman.

Reply via email to