使用PYSVN获取SVN存储库的HEAD版本号

时间:2011-04-03 09:21:13

标签: python pysvn

我正在使用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)。我怎么能做到这一点?我如何获得头部修订的NUMBER?

我可以通过从Python调用Shell来实现。但我想使用pysvn有一种“Pythonic”方式。

3 个答案:

答案 0 :(得分: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存储库的根目录时才有效。如果您提供回购邮件的子网址,则revlog将为空不是HEAD本身)

答案 1 :(得分:6)

更好(更快)的方法是:

client.revpropget("revision", url=svn_url)[0].number

答案 2 :(得分: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