如何从 python 远程轮询颠覆历史记录/日志?

发布于 2024-12-11 17:53:44 字数 258 浏览 0 评论 0原文

我需要找到分支的第一个提交者,而不必检查所有整个分支。 从命令行这很容易做到:

svn log -v --stop-on-copy http://subversion.repository.com/svn/repositoryname

我需要从 python 脚本执行此操作,知道我该怎么做吗?我检查了 python subversion 绑定,但我不明白如何做到这一点,即使它看起来可以做到。

任何帮助将不胜感激。

I need to find the first committer of a branch without having to do a checkout of all the entire branches.
From command line that is very easy to do:

svn log -v --stop-on-copy http://subversion.repository.com/svn/repositoryname

I need to do this from a python script, any idea how can I do that? I checked the python subversion bindings but I cannot understand how to do it even if it seemed it can be done.

Any help will be appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

西瓜 2024-12-18 17:53:44

你可以只使用Python的 subprocess 模块:

from subprocess import Popen, PIPE
p = Popen('svn log -v --stop-on-copy http://subversion.repository.com/svn/repositoryname',
          stdout=PIPE)
stdout, stderr = p.communicate()

这样您就可以运行任何您想要的 SVN 命令:只需检查 stdout (也许还有 stderr)即可获取命令的结果。然后,您可以使用例如正则表达式来解析检索到的数据:

>>> s = Popen('svn log', shell=True, stdout=PIPE).communicate()[0]
>>> m = re.search('\r\nr(?P<rev>\d+)\s+\|\s+(?P<author>\w+)\s+\|\s+(?P<timestamp>.*?)\s|', s)
{'timestamp': '2011-10-10 10:45:01 +0000 (wed, okt 10 2011)',
 'rev': '1234',
 'author': 'someuser'
}

You could just use Python's subprocess module:

from subprocess import Popen, PIPE
p = Popen('svn log -v --stop-on-copy http://subversion.repository.com/svn/repositoryname',
          stdout=PIPE)
stdout, stderr = p.communicate()

This way you can run any SVN command you want: just examine stdout (and perhaps stderr) to get the command's result. You could then use for example a regex to parse the retrieved data:

>>> s = Popen('svn log', shell=True, stdout=PIPE).communicate()[0]
>>> m = re.search('\r\nr(?P<rev>\d+)\s+\|\s+(?P<author>\w+)\s+\|\s+(?P<timestamp>.*?)\s|', s)
{'timestamp': '2011-10-10 10:45:01 +0000 (wed, okt 10 2011)',
 'rev': '1234',
 'author': 'someuser'
}
倒带 2024-12-18 17:53:44

另一种选择是仅使用操作系统包从 Python 中进行命令行调用。

import os
//cmd = 'ls -l /usr/bin'
cmd = ('svn log -v --stop-on-copy http://subversion.repository.com/svn/repositoryname')

os.system(cmd)

请注意,这只会进行调用,如果您想实际捕获使用同一操作系统包中的 Popen 所需的信息。

Another option would be to just use a command line call from within Python using the OS package.

import os
//cmd = 'ls -l /usr/bin'
cmd = ('svn log -v --stop-on-copy http://subversion.repository.com/svn/repositoryname')

os.system(cmd)

Note that this will just make the call, if you want to actually capture the information you need to use Popen from the same OS package.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文