如何获得最后的SVN的用户名犯利用蚂蚁?(How to get the username of th

2019-09-16 09:51发布

我想用蚂蚁来获得最新的用户名提交一个svn存储库中。

我怎么可以这样做跨平台的可能吗?

谢谢!

Answer 1:

所以,这里是例如用于“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>

你应该把“svnant.jar”和“svnClientAdapter.jar”由“devlibs.path”标识的路径。 并以 “javahl” 或 “svnkit” 你的 “$ {ANT_HOME} / lib目录” 规定的其他库。

如果你有SVN仓库与1.6格式,您可以使用(在“svnSetting” - 阻塞设置为“真”)“svnkit”。 因为“svnkit”是一个纯Java的工具包,这是最好的时候,你需要跨平台的解决方案中使用。 如果您已经切换到1.7,那么我建议使用SVN命令行客户端(“svnSetting”在我的例子配置为命令行客户端)。 检查此页面 (SLIK SVN)约在哪里可以找到以及如何安装不同的SVN命令行客户信息。



Answer 2:

万一你喜欢不使用可选任务的解决方案,下面是你如何能做到它的要点:

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

一个缺点是,你写/删除文件可能并不总是可能的(也就是说,如果你没有权限)。 另一个缺点是,一个svn客户端(即可以通过下列方式运行svn必须安装在命令行命令)。



Answer 3:

我以为我已经张贴解答。 这是或多或少malenkiy_scot的答案 。 但是,我使用--xml标志上svn info命令。 这样就把输出svn info命令XML输出。 我当时能够使用<xmlproperty>任务来阅读。

通过使用资源集合,我也避免保存输出到一具有后面将要删除的文件的问题。

<project>
    <property name="svn.url" value="http://svn.foo.com/src/repos"/>
    <exec executable="svn"
        outputproperty="svn.info">
        <arg value="info"/>
        <arg value="--xml"/>
        <arg value="${svn.url}"/>
    </exec>
    <xmlproperty prefix="svn">
        <propertyresource name="svn.info"/>
    </xmlproperty>
    <echo message="Last committer = ${svn.info.entry.commit.author}"/>
</project>

我想看看我是否能逃脱使用<exec>任务本身作为一种资源 。 这样的话,我甚至不会有到的输出保存svn info命令的属性。 但很可惜,我无法弄清楚如何做到这一点。


平台中立的方式是瓦迪姆波诺马廖夫的答案 。 这是我本来打算回答这个问题的方式。

不过,我早就列入了svnkit jar文件devlib目录,并被迫使用svnkit 。 这将确保它的作品无论是安装了Subversion客户端。 即使没有安装Subversion客户端,它仍然工作。 只要保持必要的罐子在项目的目录里面。



Answer 4:

已经有一个可执行的外壳内具有良好的解决方案。 这种解决方案的优点是可以使用脚本,而不是在生成后phase.That解释如下做到这一点作为构建阶段的一部分。 见https://stackoverflow.com/a/11837662/5842403

事实上,你可以通过阅读/解析生成文件夹中的文件../builds/$BUILD_NUMBER/changelog.xml获取信息的生成阶段结束之前。 此文件与SVN创建提交触发和不与构建或post_build阶段结束。 这意味着,你可以在同一个脚本同样的工作的构建阶段的开始分析它,并在ENV变量插入数据。



文章来源: How to get the username of the last svn commit using ant?
标签: svn ant