2009-10-08 75 views
0

为了加快我的NAnt/CruiseControl.Net/Ivy连续构建过程,我希望能让NAnt检查我的本地PC上的代码库是否已经更改执行基于NAnt的更新,然后如果代码已更改,则启动该过程以重新构建该项目,并可能引发一个标志以构建所有后续组件,而不考虑其更改状态。让NAnt检查SVN中已更改的文件

原因在于,我的构建过程目前需要12分钟才能完成大量工作,而且我正在考虑通过不构建不会改变的代码来节省时间因为让办公室的开发人员也更加快乐。

我们调查了从构建顺序中删除了一些项目,但它们都是在构建树顺序进一步发生任何更改的情况下都需要的。

回答

6

几个选项,我可以看到

1 - 前 - 显示,更新了svn起来发出SVN状态和工作是否有任何变化(应该是在响应计数线一样简单 - 我认为和最新的文件夹将只生成1行)

2 - 从svn-update任务更改为exec任务,并将输出从svn重定向到测试文件,您可以发布过程以确定是否有更新(与第一个选项类似)。

3 - 根据http://jonathanmalek.com/wp/?p=244获取svn后的svn日志,然后处理xml以确定是否进行了任何更改。这只有在保证只有1转数增加的情况下才有效,因为它只获取上次修订的日志信息。对此的变化将在svn之前和之后抓取日志,然后进行比较。

<target name="Svn-update"> 
    <!-- Default to true so failure mode is to build/signal build is required --> 
    <property name="source.changed" value="true"/> 
    <exec 
      program="svn.exe" 
     commandline=’up′ 
      output="_update.log" 
      failonerror="true"/> 
    <property name="updates.count" value="0"/> 
    <foreach item="Line" in="_update.log" property="updates.line" trim="Both"> 
     <property name="updates.count" value="${int::parse(updates.count) + 1}"/> 
    </foreach> 
    <if test="${updates.count==1}"> 
     <!-- An up to date working directory generates a single line "At revision xxx" --> 
     <property name="source.changed" value="false"/> 
    </if> 
</target> 

现在:

个人而言,我会去与选项2上运行一个SVN了最新的工作目录结果在一条线(修订版),因此从使用svn更新任务以下改变您可以使用if =“$ {source.change =='true'}”和除非=“$ {source.changed =='true'}”来确定何时应该执行剩余的构建和通知

+0

迄今为止付出的努力,但我认为我需要更具体的东西来奖励积分。来吧 - 给我一些代码! :o) – 2009-10-13 12:39:58

+0

你是男人!好功夫! 150分即将到来! – 2009-10-14 10:54:58