如何使用ant获取上次svn提交的用户名?

cla*_*amp 3 svn ant

我想使用Ant来获取svn存储库的最新提交的用户名.

我怎么能尽可能跨平台呢?

谢谢!

Vad*_*rev 7

所以,这里是"svnant"的例子:

<path id="devlibs.path">
    <fileset dir="devlib" includes="**/*.jar" />
</path>

<typedef resource="org/tigris/subversion/svnant/svnantlib.xml" classpathref="devlibs.path" />

<svnSetting
        id="svn.settings"
        svnkit="false"
        javahl="false"
        username="${svn.username}"
        password="${svn.password}" />

<target name="get-svn-author">
    <svn refid="svn.settings">
        <singleinfo target="${svn.repo.url}" property="author.result" request="author" />
    </svn>

    <echo message="Author of last commit: ${author.result}" />
</target>
Run Code Online (Sandbox Code Playgroud)

您应该将"svnant.jar"和"svnClientAdapter.jar"放入"devlibs.path"标识的路径中.和"javahl"或"svnkit"所需的其他库到你的"$ {ANT_HOME}/lib".

如果你有1.6格式的SVN存储库,你可以使用"svnkit"(在"svnSetting"-block中设置为"true").因为"svnkit"是纯Java工具包,所以当您需要跨平台解决方案时,最好使用它.如果您已经切换到1.7,那么我建议使用SVN命令行客户端(在我的示例中为命令行客户端配置"svnSetting").查看此页面(Slik SVN),了解有关在何处查找以及如何安装不同SVN命令行客户端的信息.


mal*_*cot 7

如果您更喜欢不使用可选任务的解决方案,以下是您如何做到这一点的要点:

<target name="get-svn-author">
    <tempfile property="svninfo.result"/>
    <exec executable="svn" output="${svninfo.result}">
        <arg value="info"/>
        <arg value="${svn.repo.url}"/>
    </exec>
    <tempfile property="svnauthor.result"/>
    <copy file="${svninfo.result}" tofile="${svnauthor.result}">
        <filterchain>
            <linecontainsregexp>
                <regexp pattern="Last Changed Author:*"/>
            </linecontainsregexp>
        </filterchain>
    </copy>
    <concat>
        <filelist files="${svnauthor.result}"/>
    </concat>
    <delete file="${svninfo.result}"/>
    <delete file="${svnauthor.result}"/>
</target>
Run Code Online (Sandbox Code Playgroud)

一个问题是您编写/删除可能并不总是可能的文件(即,如果您没有权限).另一个问题是svn必须安装一个svn客户端(可以通过命令行中的命令运行).