我正在建立一个分支我们项目的目标。
它在SVN中创建一个分支,检出该分支,使用新提供的版本号更新该分支内的各种文件,全部检查。
SVN分支第一次运行正常(使用复制命令URL-&gt; URL),但如果它第二次运行,它会将主干复制到BranchName / trunk,而不是说它已经存在。< / p>
Nant有没有合理的方法来检测分支已经存在而不是第二次尝试进行SVN复制?
我正在尝试在脚本中构建一些智能,这样如果它以相同的输入第二次运行,那么就不会发生任何不良事件。
答案 0 :(得分:1)
我不知道特定于Nant的方法,但您可以使用svn info
来检查:
>svn info http://svn.host.com/repo/no-such-path
http://svn.host.com/repo/no-such-path: (Not a valid URL)
与
>svn info http://svn.host.com/repo/existing-path
Path: existing-path
URL: http://svn.host.com/repo/existing-path
Repository Root: http://svn.host.com/repo
Repository UUID: ...
Revision: ...
Node Kind: ...
Last Changed Author: ...
Last Changed Rev: ..
Last Changed Date: ...
令人遗憾的是,在任何一种情况下,ERRORLEVEL都是0
,但如果有帮助,您可以使用--xml
开关。或者看看Subversion的一些.NET绑定。
答案 1 :(得分:1)
这是我的最终剧本:
<target name="branchSvn">
<exec program="${svn.executable}"
commandline='info ${svn.build.root.path}/branches/${branch.name}/ --xml' output='svn_${branch.name}.xml' />
<xmlpeek file='svn_${branch.name}.xml' xpath='/info'
property='branch.info' />
<echo message='${svn.build.root.path}/branches/${branch.name}/ already exists.'
if="${branch.info!=''}" />
<delete file='svn_${branch.name}.xml' />
<exec program="${svn.executable}"
commandline='copy ${svn.build.root.path}/trunk ${svn.build.root.path}/branches/${branch.name}/ -m "Branched ${branch.name} by nant script."'
if="${branch.info==''}" />
</target>
我使用-xml函数和xmlpeek来获取我需要的信息。