删除SVN版本号末尾的字母

时间:2015-10-28 21:43:30

标签: svn ant build.xml

我的目标是显示我有哪个工作副本

<target name="svnversion">
        <exec executable="svnversion" outputproperty="svnversion" />
        <echo message="SVN Version: ${svnversion}" />
    </target>

我希望它返回最后没有M或S的数字,无论是否是这种情况,所以如果上面的输出是:17349M,我希望它返回17349。我试过了this answer on a different SE。但是,我认为即使这确实有效,但如果M或S不存在,它会减少结束号。

2 个答案:

答案 0 :(得分:4)

  1. 您必须牢记所有可能的输出版本:它不仅仅是尾随“M”或“S”。来自svnversion帮助
  2. If the working copy is unusual the version identifier will be more complex:
    
       4123:4168     mixed revision working copy
       4168M         modified working copy
       4123S         switched working copy
       4123P         partial working copy, from a sparse checkout
       4123:4168MS   mixed revision, modified, switched working copy
    

    你必须处理所有表格

    1. 从技术上讲,管道到grep将允许您检测您拥有哪种类型的WC

    2. 毕竟,请阅读about sed,这样您就可以执行任何所需的转换,如果您能够描述它

      < / LI>

答案 1 :(得分:0)

<outputfilterchain>可以捕获<exec>任务的输出,转换输出,并将结果保存在属性中。例如......

<fail unless="wc.dir"/>
<exec executable="svnversion" outputproperty="my-svnversion" failonerror="true">
    <redirector>
        <outputfilterchain>
            <tokenfilter>
                <replaceregex pattern="^(\d+)[MS]$" replace="\1"/>
            </tokenfilter>
        </outputfilterchain>
    </redirector>
    <arg value="${wc.dir}"/>
</exec>

<echo>my-svnversion: ${my-svnversion}</echo>

为了测试这个脚本,我创建了一个带有修改文件的SVN工作副本......

$ svn st
M       test.txt

...并验证了svnversion通常返回的内容......

$ svnversion
1M

运行Ant脚本然后报告...

run:
     [echo] my-svnversion: 1

请注意,此脚本不会处理&#34;混合修订工作副本&#34;,&#34;混合修订,修改,切换工作副本&#34;或&#34;部分工作复制,从稀疏结账&#34; Lazy Badger在答案中提到的可能性。