我试图从Python / SWIG调用fs.change_rev_prop2
- 显然无法弄清楚如何通过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.
#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
我相信我试图传递的价值是&#34;正确&#34;。毕竟,我在尝试将其设置回来之前立即从API获取它。我假设我没有以本机API可以接受的方式正确传递值。
所以我可以继续使用change_rev_prop
- 但它在API中被明确标记为已弃用(&#34;为了向后兼容1.6 API&#34而提供)。应该可以做得更好,但是......
有趣的是,使用change_rev_prop2
为None
调用old_value_p
会导致所需的更改在存储库中生效 - 但不会导致Python程序立即以分段错误终止。
似乎我需要将旧/当前值作为指针传递 - 可能能够区分空指针(未提供的值)与指向空值的指针(值为提供,但值为空)?但是,我已经尝试了所有我能想到的组合而没有成功 - 包括使用ctypes中的各种包装。
SO正在适当地建议可能已经有答案的大量问题 - 但似乎大多数问题都包括作者控制C源的情况以及改变C API以避免复杂性的建议完全 - 我不认为这是一个选择。这是我迄今为止唯一的Python和SWIG体验,任何提示都将不胜感激,谢谢!