如何检测Nant中的现有SVN目录?

时间:2009-03-19 18:20:36

标签: svn build-process nant

我正在建立一个分支我们项目的目标。

它在SVN中创建一个分支,检出该分支,使用新提供的版本号更新该分支内的各种文件,全部检查。

SVN分支第一次运行正常(使用复制命令URL-&gt; URL),但如果它第二次运行,它会将主干复制到BranchName / trunk,而不是说它已经存在。< / p>

Nant有没有合理的方法来检测分支已经存在而不是第二次尝试进行SVN复制?

我正在尝试在脚本中构建一些智能,这样如果它以相同的输入第二次运行,那么就不会发生任何不良事件。

2 个答案:

答案 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来获取我需要的信息。