【问题标题】:Getting NAnt to check for changed files in SVN让 NAnt 检查 SVN 中的更改文件
【发布时间】:2009-10-08 08:18:07
【问题描述】:

为了加快我的 NAnt/CruiseControl.Net/Ivy 连续构建过程,我希望在执行基于 NAnt 的更新后让 NAnt 检查我的本地 PC 上的代码库是否发生了变化,然后如果代码发生更改,则开始重新构建该项目的过程,并可能引发一个标志以构建所有后续组件,无论其更改状态如何。

原因是,我的构建过程目前需要超过 12 分钟才能完成大量工作,我认为我可以通过不构建不会改变的代码来缩短这段时间,以及让办公室里的开发人员也更快乐。

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

【问题讨论】:

    标签: svn build-automation cruisecontrol.net nant


    【解决方案1】:

    我可以看到几个选项

    1 - 在 svn up 之前发出 svn status --show-updates 并确定是否有任何更改(应该像计算响应中的行一样简单 - 我认为最新的文件夹只会生成 1行)

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

    3 - 在 svn up 之后使用基于http://jonathanmalek.com/wp/?p=244 的任务获取 svn 日志,然后处理 xml 以确定是否进行了任何更改。这仅在您保证仅增加 1 转数时才有效,因为它仅获取最新版本的日志信息。对此的变化是在 svn up 之前和之后获取日志,然后比较它们。

    我个人会选择选项 2。在最新的工作目录上运行 svn up 会导致一行(在修订版)因此从使用 svn update 任务更改为以下内容:

    <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>
    

    现在您可以使用 if="${source.change=='true'}" 和 unless="${source.changed=='true'}" 来确定何时应该并且应该执行其余部分构建和通知

    【讨论】:

    • 到目前为止做得很好,但我认为我需要更具体的东西来奖励积分。来吧 - 给我一些代码! :o)
    猜你喜欢
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 2019-05-08
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-16
    相关资源
    最近更新 更多