zie*_*mer 6 python svn swig pointers
我试图fs.change_rev_prop2从Python/SWIG 调用- 显然无法弄清楚如何传递,old_value_p因为我假设需要成为Python的双指针.
最小化代码示例:
#!/usr/bin/env python
from svn import repos, fs, core
fs_ptr = repos.fs(repos.open("/opt/app/svn/repos/test"))
rev_num = 1
user = fs.revision_prop(fs_ptr, rev_num, "svn:author")
# Works, but is is deprecated in favor of fs.change_rev_prop2 .
fs.change_rev_prop(fs_ptr, rev_num, "svn:author", user.lower())
# fs.change_rev_prop2(fs_ptr, rev_num, "svn:author", user, user.lower())
# > svn.core.SubversionException: 160049 - revprop 'svn:author' has unexpected value in filesystem
# fs.change_rev_prop2(fs_ptr, rev_num, "svn:author", None, user.lower())
# Per svn_ra.h: If the capability is not advertised, then @a old_value_p MUST be @c NULL.
# This results in a successful change of the revision property, but then this program ends with a segmentation fault.
Run Code Online (Sandbox Code Playgroud)
#160049错误的详细信息:
Traceback (most recent call last):
File "./normalize-usernames.py", line 10, in <module>
fs.change_rev_prop2(fs_ptr, rev_num, "svn:author", user, user.lower())
File "/opt/app/subversion/lib/svn-python/libsvn/fs.py", line 711, in svn_fs_change_rev_prop2
return _fs.svn_fs_change_rev_prop2(*args)
svn.core.SubversionException: 160049 - revprop 'svn:author' has unexpected value in filesystem
Run Code Online (Sandbox Code Playgroud)
我相信我试图传递的价值是"正确的".毕竟,我是在尝试将其设置回来之前立即从API获取的.我假设我只是没有以本机API可以接受它的方式正确传递值.
所以我可以继续使用change_rev_prop- 但它在API中明确标记为已弃用("为了向后兼容1.6 API而提供").应该可以做得更好,但......
有趣的是,要求change_rev_prop2与None对old_value_p结果期望改变生效的库-但并非没有引起Python程序来之后,立刻用分段错误终止.
看起来我需要将旧的/当前值作为指针传递 - 可能能够区分到空指针(未提供的值)和指向空值的指针(提供值,但是提供的值)之间的差异.值为空)?但是,我已经尝试了所有我能想到的组合而没有成功 - 包括使用来自ctypes的各种包装器.
SO正在适当地建议可能已经有答案的大量问题 - 但似乎大多数问题都包括作者控制C源的情况以及改变C API以避免复杂性的建议 - 其中我不认为这是一个选择.这是我迄今为止唯一的Python和SWIG体验,任何提示都将不胜感激,谢谢!