去掉 SVN 版本号末尾的字母

Remove letter off the end of SVN Version number

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

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

我希望它成为 return 末尾没有 M 或 S 的数字,无论是否是这种情况,所以如果上面的输出是:17349M ,我想return17349。我尝试过 this answer on a different SE。但是,我认为即使这样做有效,如果 M 或 S 不存在,它也会切断结束编号。

  1. 您必须记住 所有 种可能的输出版本:它不仅仅是尾随 "M" 或 "S"。来自 svnversion 帮助
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 将允许您检测您的厕所类型

  2. 毕竟,阅读 about sed 这将使您能够执行 任何 所需的转换,如果您能够描述它

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

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

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

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

$ svn st
M       test.txt

...并验证了通常使用的 svn 版本 returns...

$ svnversion
1M

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

run:
     [echo] my-svnversion: 1

请注意,此脚本不处理 Lazy Badger 在回答中提到的 "mixed revision working copy"、"mixed revision, modified, switched working copy" 或 "partial working copy, from a sparse checkout" 可能性。