斯文是一个面向文档的编程库,可以帮助您将内容放入版本控制的文档存储库
项目描述
它可以与SVN或BZR后端一起使用。
SVN后端需要 pysvn,您可能需要将其安装在系统范围内[1]。
BZR后端需要 bzrlib。目前仅支持bzr 2.0+。
基本用法
from sven.backend import SvnAccess client = SvnAccess(my_local_checkout_dir) client.write('path/to/a/file/to/write', "Lovely content to be versioning!") client.write('path/to/another/file', "Aw shucks, I'll version this too..", msg="My commit message", mimetype='text/plain') last_rev_int = client.last_changed_rev('path/to/another/file') last_rev_int = last_rev_int - 1 from sven.exc import ResourceUnchanged try: earlier_version = client.read('path/to/another/file', rev=last_rev_int) except ResourceUnchanged, exc: last_rev_int = exc.last_change earlier_version = client.read('path/to/another/file', rev=last_rev_int) changelog = client.log('path/to/another/file', rev=last_rev_int)
要使用BZR后端,
from sven.bzr import BzrAccess
接口是相同的。
每个 .write 将内容写入本地文件系统的检出路径,然后将其提交到存储库。每个提交一次写入的工作流程是设计决定的,并且短期内不太可能改变;如果您需要不同的工作流程,您可能应该直接使用svn客户端。
目前sven无法帮助您设置存储库客户端或服务器。它假设您已经设置了存储库和检出(在BZR的情况下,它们可能是同一件事)。
一些方法返回的格式(.read、.log和.ls)目前是完全临时的且奇怪;它们迟早会正式化。
有关更详细的用法文档,请参阅 ./sven/doctest.txt(可以通过 python sven/backend.py 作为测试套件运行)和 ./sven/bzr.txt(可以通过 python sven/bzr.py 作为测试套件运行)
- [1] 如果您在编写sven时开始遇到段错误,尤其是在
编写操作期间,您使用的svn和pysvn版本可能不兼容(例如,svn 1.5与针对您早期svn 1.4编译的pysvn)。如果发生这种情况,您应该卸载pysvn,然后从源代码编译它。您可能想通过运行测试套件提前测试这种情况
python sven/backend.py
在github上关注sven: <http://github.com/socialplanning/sven>
本版本新增内容
添加了sven.exc.MissingRepository异常,在访问不存在仓库时抛出。
向BzrAccess.__init__添加了kwarg check_repo,默认为False。如果设置为True,构造函数将检查仓库是否存在,如果不存在则抛出MissingRepository。
为 BzrAccess.write 方法添加 author 参数,默认值为 None。它可以设置为字符串值,用作提交的“作者”。(系统级别的 bzr whoami 输出仍将用于提交的“贡献者”。这相当于命令行 bzr commit –author。)
为 BzrAccess.write 方法添加 timestamp 参数,默认值为 None。它可以设置为数值时间戳,将覆盖提交中的当前系统时间。这相当于命令行 bzr commit –timestamp。
手动从提交消息中删除所有“r”字符;bzr 看起来如果在其中存在任何“r”字符,则会崩溃。
历史
0.8.1 (2010-11-10)
为 bzr 后端制作合理的版本号(每个写入一个提交,无论创建了多少中间目录)
0.8 (2010-08-26)
导入 sven 时不需要安装 python svn 库
针对 Python 2.4 兼容性的调整
添加写入 revprops 的支持
0.7.2 (2010-01-26)
修复 SVN 后端中 ‘mimetype’ 获取器的错误。
0.7.1 (2010-01-26)
将 SVN 后端更新为使用 ‘mimetype’ 而不是 ‘kind’。
0.7 (2010-01-26)
添加了 bazaar 后端和测试。
移除了实验性的 mercurial 后端。我只需要“比 subversion 更快的”东西,Bazaar 的世界观更适合我的大脑,所以我怀疑我不会维护 mercurial 后端。如果你在使用它,请大声抱怨,因为我不知道你在使用它。
client.kind(uri) 现在像其他所有东西一样,接受一个可选的整数 rev 参数。
由 .read() 返回的奇怪字典现在使用名为 ‘body’ 和 ‘mimetype’ 的键,而不是 ‘body’ 和 ‘kind’。
重构了 SVN 后端类中的路径归一化,并在构造函数中添加了可选的 path_fixer 可调用参数。
如果提供,path_fixer 应期望仅以字符串 URI 作为唯一参数被调用。它应该返回一个字符串 URI。它可以用来定义文件系统布局策略,例如“始终在日期层次结构下存储以“r”开头的文件”或“添加文件扩展名”。
不过,我可能过早地过度抽象了,所以如果我觉得要放弃这个想法,我并不惊讶。
在向文件写入内容时,Sven 以前会在内容末尾添加换行符,不管内容是否已经以换行符结尾。现在,sven 只会在内容不以换行符结尾时添加换行符。
为 bazaar 后端实现了自定义资源属性,因为它没有类似 svn propget/propset 的概念。
资源属性作为独立版本化的文件实现。文件和目录属性位于不同的位置,因为这看起来更容易也更合逻辑。
对于文件“/foo/bar/baz.txt”,其“mimetype”属性位于“/.sven-meta/.mimetype/foo/bar/baz.txt”,其“fleem”属性位于“/.sven-meta/.fleem/foo/bar/baz.txt”。
对于目录“/foo/bar/”,其“mimetype”属性位于“/foo/bar/.sven-meta/.mimetype”,其“fleem”属性位于“/foo/bar/.sven-meta/.fleem”。
请注意,对于用户直接读取和写入的正常文件,sven 的默认行为是如果文件末尾没有换行符,则将其添加到文件末尾。对于这些元数据文件,sven 不会将换行符添加到文件末尾。
0.6 (2009-11-24)
SvnBackend.__init__ 不再接受远程存储库的 ‘svnuri’ 参数作为其第一个位置参数;它无处可用。这是一个不兼容的更改。
SvnAccess.ls 返回的奇怪的自定义 JSONish 对象错误地有一个额外的 / 前缀;现在已修复。
为 Mercurial 后端实验性实现的 Sven API 现在位于 sven.hg.HgAccess;它在 hg-doctest.txt 中有文档说明,与 SvnAccess 后端有一些小的差异。它高度不完整(可以将其视为 alpha 阶段)并需要安装 mercurial。Sven 不安装 mercurial,就像它不安装 pysvn 一样。
0.5
0.5 版本不存在。Sven 在 0.4.1 后直接跳到 0.6,并做了一些向后不兼容的更改。
0.4.1 (2009-08-10)
修复了 0.4 版本中的一些令人尴尬的错别字
0.4 (2009-08-10)
添加了 simple_backend.FSAccess 类,它部分实现了 SVNAccess API,但基于普通文件系统。需要测试和文档,以及其他事项(例如论证)
重构了 SvnAccess,将最近添加的 update_before/after_write 选项拆分成了逻辑上独立的组件
SvnAccess.set_kind 和 .write 现在返回 (最后) 提交的 pysvn.Revision,而不是 None
添加了 SvnAccessEventEmitter 类,该类在每次成功的 .write 和 .set_kind 动作结束时执行一系列回调函数
- 回调函数的签名应该是
(uri, contents, msg, kind, (pre_rev, post_rev))
0.3.1 (2009-07-28)
修复了 bug:SvnAccess.ls 返回的内容带有绝对 URI,而不是相对于仓库根目录的 URI。
0.3 (2009-07-25)
移除了 SvnAccess.update_after_write 控制台,并将 SvnAccess.write 中 update_after_write 参数的默认值设置为 True;调用者可以通过子类化简单地实现替代方案。
为 .write 添加了 update_before_write 参数,默认值为 True。如果您想以潜在的性能显著提升为代价管理同步性,请关闭此选项以及 update_after_write。
将 default_commit_message 参数添加到 SvnAccess 构造函数中。默认值为“foom”。
当在写入操作中发现文件已过时时抛出 exc.ResourceChanged 异常(这只有在调用者未取消设置 update_before_write 时才会发生),并在这种情况下回滚本地更改,以恢复检查出的无冲突状态。
0.2 (2009-07-25)
现在有 doctests 了!
SvnAccess.write 现在支持可选的 update_after_write 参数。如果设置为 True,则 .write 的调用将以 svn up 结束,以将检查出的内容与仓库同步。默认值为 False。
SvnAccess.__init__ 现在支持可选的 update_after_write 参数。如果设置为 True,则所有 .write 的调用将以 svn up 结束,即使 .write 没有发送 True 的 update_after_write 值。默认值为 True,因此如果您关注性能并愿意自行维护同步性,应显式将其设置为 False。
SvnAccess.__init__ 现在不再执行静默的 os.chdir。
0.1.2 (2009-07-24)
第一个版本。
项目详情
sven-0.9.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 53b295658ef44e3b92a2c8c5bd805a23f7a7780252f481cb0ed100e60a90a78a |
|
MD5 | c66cf5b0d3bf9366538de60ae3f4b410 |
|
BLAKE2b-256 | eec197a6adb4c9f983876f25c79eb6dbc0e1c7d392577eacd3b68cf11064e99e |