我想用蚂蚁来获得最新的用户名提交一个svn存储库中。
我怎么可以这样做跨平台的可能吗?
谢谢!
我想用蚂蚁来获得最新的用户名提交一个svn存储库中。
我怎么可以这样做跨平台的可能吗?
谢谢!
所以,这里是例如用于“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命令行客户信息。
万一你喜欢不使用可选任务的解决方案,下面是你如何能做到它的要点:
<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
必须安装在命令行命令)。
我以为我已经张贴解答。 这是或多或少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客户端,它仍然工作。 只要保持必要的罐子在项目的目录里面。
已经有一个可执行的外壳内具有良好的解决方案。 这种解决方案的优点是可以使用脚本,而不是在生成后phase.That解释如下做到这一点作为构建阶段的一部分。 见https://stackoverflow.com/a/11837662/5842403
事实上,你可以通过阅读/解析生成文件夹中的文件../builds/$BUILD_NUMBER/changelog.xml获取信息的生成阶段结束之前。 此文件与SVN创建提交触发和不与构建或post_build阶段结束。 这意味着,你可以在同一个脚本同样的工作的构建阶段的开始分析它,并在ENV变量插入数据。