On Jan 20, 2010, at 11:10 , Роман Донченко wrote: > Daniel Eggert <egg...@macvaerk.dtu.dk> писал в своём письме Wed, 20 Jan 2010 > 19:54:40 +0300: > >>>> I got svn.ra.open2() and svn.ra.get_dir() working, but I'm unable to make >>>> the receiver/baton part of >>>> l = svn.ra.get_log2(session, None, 1, 4, 0, False, False, [], receiver, >>>> None) >>>> work. The receiver is supposed to be a svn_log_entry_receiver_t. I tried >>>> to do >>>> def receiver(baton, entry): >>>> print entry >>>> but I get >>>> TypeError: argument number 8: >>> >>> The immediate cause of this is that you forgot the include_merged_revisions >>> argument. 8=] But were you to include it, your code would still be wrong, >>> because... >>> >>>> How does swig wrap svn_log_entry_receiver_t? >>> >>> A callable Python object (which can be a function, or a class instance) >>> that you pass becomes both the C function and the C baton. Thus, your call >>> should look like: >>> >>> svn.ra.get_log2( >>> session, # session >>> None, # paths >>> 1, # start >>> 4, # end >>> 0, # limit >>> False, # discover_changed_paths >>> False, # strict_node_history >>> False, # include_merged_revisions >>> [], # revprops >>> receiver # receiver & receiver_baton >>> # pool (is omitted) >>> ) >>> >>> And the receiver should look like: >>> >>> def receiver(entry, pool): >>> print entry >>> >>>> I have not been able to find any python sample code that uses svn.ra. >>> >>> Look at the bindings' testsuite at >>> <http://svn.apache.org/repos/asf/subversion/trunk/subversion/bindings/swig/python/tests/ra.py>. >> >> Thanks. This is very helpful. >> >> Some of those crash for me, too: >> >>>>> root = svn.ra.get_repos_root(session) >> Assertion failed: (is_canonical(path, strlen(path))), function >> svn_path_is_empty, file >> /SourceCache/subversion/subversion-35/subversion/subversion/libsvn_subr/path.c, >> line 414. >> Abort >> >> It turns out that this was caused by my repository URL having a trailing >> "/". Not very elegant for the entire thing to simply crash, and not very >> easy to figure out what was causing this. >> >> It would be great if this would be handled more gracefully. >> >> I'm currently using version 1.6.5 (r38866). > > This is a constraint of the C API. When you pass paths and URIs to Subversion > functions, they must be in the canonical internal form. Unless the URI you > use is an output of another Subversion function, you must use > core.svn_path_internal_style to prepare it.
Aha! Thanks a lot! /Daniel