使用PYSVN获取SVN仓库的HEAD修订号
我正在使用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 - 5
到head
)。我该怎么做呢?我如何才能获取到最新修订版本的编号?
我可以通过在Python中调用Shell来实现这个功能。但我觉得使用pysvn应该有更“Pythonic”的方法来做到这一点。
3 个回答
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
6
一种更好(也更快)的方法是这样的:
client.revpropget("revision", url=svn_url)[0].number
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仓库的根目录作为网址时才有效。如果你提供的是仓库的子网址,而不是最新版本(HEAD),那么修订日志将是空的)