5

我正在使用 pysvn 来监视 Subversion 目录中的更改。这就是我从修订中获取信息的方式:

(...)
svn_root = "http://svn/"
client = pysvn.Client()
from_revision = pysvn.Revision(pysvn.opt_revision_kind.number, 1500)
to_revision = pysvn.Revision( pysvn.opt_revision_kind.head )

revisions = client.log(svn_root, to_revision, to_revision, discover_changed_paths=True)

现在,我想获取的更改不是来自特定修订,例如我的示例,而是最近 5 个修订中的更改(从head - 5head)。我怎样才能做到这一点?我怎样才能得到头部修订的编号?

我可以通过从 Python 调用 Shell 来做到这一点。但我想有一种使用 pysvn 的“Pythonic”方式。

4

3 回答 3

7

知道了。在提供已签出的 SVN 源的路径时,我可以像这样要求 HEAD 修订:

headrev = client.info(svnroot).get("revision").number

另一种选择是:

headrev = pysvn.Revision( pysvn.opt_revision_kind.head )            
revlog = svnclient.log( url, revision_start=headrev, revision_end=headrev, discover_changed_paths=False)
headrev = revlog[0].revision.number

注意,后者仅在您使用 SVN 存储库的根目录作为 url 时才有效。如果您提供 repo 的子 url,如果它不是 HEAD 本身,则 revlog 将为空)

于 2011-04-03T10:26:54.970 回答
6

更好(更快)的方法是:

client.revpropget("revision", url=svn_url)[0].number
于 2013-01-29T21:24:26.027 回答
3

您可以像下面这样获得头部修订的编号:

client = pysvn.Client()
headrev = client.info(svn_url).revision.number

然后,您需要根据您想要的方式定义修订:

from_revision = pysvn.Revision(pysvn.opt_revision_kind.number, headrev -5)
to_revision = pysvn.Revision( pysvn.opt_revision_kind.head )

最后,您可以在循环中使用日志输出(这是一个列表)并提取您想要的信息:

for l in log:
    print i.date
    print i.author   
于 2011-09-09T14:44:08.827 回答