跳转到主要内容

斯文是一个面向文档的编程库,可以帮助您将内容放入版本控制的文档存储库

项目描述

它可以与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.writeupdate_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 (11.5 kB 查看哈希值)

上传时间 源代码

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面