我使用以下python命令自动合并和提交文件
p = subprocess.Popen("svn merge ...")
p.communicate()
if(no conflict)
p = subprocess.Popen("svn commit..."
else
Abort script
如果发生冲突,停止脚本的最佳方法是什么?我想在可能的情况下抑制合并输出。
答案 0 :(得分:1)
svn merge
会提示您这样的事情:
Conflict discovered in 'foo'.
Select: (p) postpone, (df) diff-full, (e) edit,
(mc) mine-conflict, (tc) theirs-conflict,
(s) show all options:
您可以使用--non-interactive
标记跳过提示:
svn merge --non-interactive URL WC
(注意--not-interactive
也可以用于其他SVN命令。)
这将允许合并在没有用户输入的情况下继续,但会标记任何有冲突的文件;在提交之前,您必须手动解决与svn resolve
的冲突。
您还可以使用--accept
选项:
svn merge --accept postpone URL WC
这将给出基本相同的最终结果。*
您可以使用--quiet
标记来抑制输出。
不幸的是,SVN客户端并未将冲突合并视为失败,因此它以零状态退出。您可以在合并后运行svn status
以查看是否存在任何文件冲突,例如:
M bar
C foo
D qux
或者,您可以尝试使用SWIG bindings to the C API,这可以让您进行更细粒度的错误检查。还有PySVN,据说比SVN提供的绑定更像Pythonic。
*我会使用--non-interactive
代替--accept
,因为--non-interactive
将禁止所有提示,而不仅仅是针对冲突的提示。例如,如果您尚未保存运行脚本的用户的凭据,--non-interactive
将导致合并立即失败,而如果您使用--accept
,系统将提示您输入密码并且你的脚本会挂起。