删除SVN版本号末尾的字母



我有目标来显示我有的工作副本

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

我希望它返回结尾不带m或S的数字,不管情况是否如此,所以如果上面的输出是:17349M,我希望它会返回17349。我曾在另一个SE上尝试过这个答案。然而,我认为即使这确实有效,在M或S不存在的情况下,它也会截断结束数。

  1. 您必须记住输出的所有可能版本:它不仅仅是尾随"M"或"s"。来自sversion帮助
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. 毕竟,阅读一下sed,它将允许您执行任何所需的转换,如果您能够描述它的话

<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

并验证了sversion通常返回的内容。。。

$ svnversion
1M

运行Ant脚本后报告。。。

run:
     [echo] my-svnversion: 1

请注意,该脚本不处理Lazy Badger在回答中提到的"混合修订工作副本"、"混合修订、修改、切换工作副本"或"稀疏签出的部分工作副本"的可能性。

相关内容

  • 没有找到相关文章

最新更新