代码之家  ›  专栏  ›  技术社区  ›  Brett Rigby

让NAnt检查SVN中已更改的文件

  •  0
  • Brett Rigby  · 技术社区  · 15 年前

    为了加快我的NAnt/CruiseControl.Net/Ivy连续构建过程,我希望NAnt在执行基于NAnt的更新后检查我在本地PC上的代码库是否已更改,然后检查代码是否已更改 已更改,然后启动重新构建该项目的过程,并可能升起一个标志来构建所有后续组件,而不管其更改状态如何。

    原因是,我的构建过程目前需要超过12分钟来完成大量的工作,我想这一次我可以通过不构建不会改变的代码来完成,同时也可以让办公室的开发人员更快乐。

    我们已经调查过从构建顺序中删除一些项目,但是如果在构建树顺序的后续发生任何更改,它们都是必需的。

    1 回复  |  直到 15 年前
        1
  •  7
  •   Neal    15 年前

    我可以看到几个选择

    1-发布svn状态-在svn启动之前显示更新,并确定是否有任何更改(应该像计算响应中的行一样简单-我认为最新文件夹只会生成1行)

    2-将svn更新任务更改为exec任务,并将svn的输出重定向到一个测试文件中,您可以对该文件进行后期处理,以确定是否进行了任何更新(类似于第一个选项)。

    3-在svn启动后获取svn日志,并基于 http://jonathanmalek.com/wp/?p=244 然后处理xml以确定是否进行了任何更改。这将只工作,如果你被保证只有1个版本号增加,因为它只获得日志信息的最后一次修订。这方面的变化是在svn启动之前和之后抓取日志,然后比较它们。

    就我个人而言,我会选择方案2。在最新的工作目录上运行svn up会产生一行(修订时),因此将使用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>