Java:如何获得用于程序的mercurial当前变更集编号

时间:2010-05-10 19:53:50

标签: java mercurial changeset

我最近开始在Java项目中使用mercurial进行版本控制。当我运行程序时,它用于产生特定输出的输入参数被写入特定文件。如果我可以将当​​前的mercurial变更集编号(表示我的程序的版本)添加到该输出文件中会很好。

在Windows上最简单的方法是什么? 我可以编写一个简单的Java解析器来获取hg log -l 1命令第一行的输出,但也许有一种更简单的方法(即代码行更少)?

5 个答案:

答案 0 :(得分:10)

您可以使用 hg identify

hg id应该在打包过程中,提交源并生成应用程序的打包(jar)版本。
在该步骤中,您可以生成包含此类信息的version.txt文件。

$ MY_VERSION=$(hg id)
$ echo $MY_VERSION
53efa13dec6f+ tip

(参见例如"build identification" for Python

答案 1 :(得分:7)

由于您在Java项目中,这可能与您相关。我使用此Ant目标在Tomcat Manager页面的应用程序列表中显示版本信息(Mercurial changeset id)。我只是将变更集ID放在我的web.xml中的 display-name xml元素中。

<target name="build.release">
    <exec executable="/usr/local/bin/hg" outputproperty="scm.version.tag.id">
        <arg value="id"/>
        <arg value="-i"/>
    </exec>
    <filter token="build.version.tag" value="${scm.version.tag.id}" />
    <copy file="${web.home}/WEB-INF/web.xml" todir="${build.home}" filtering="true" />
</target>

在web.xml中, display-name xml元素中有一个标记,如下所示:

<display-name>My Webapp @build.version.tag@</display-name>

答案 2 :(得分:2)

以下是Mercurial开发人员的观点:Keyword Substitution - Why You Don't Need It

答案 3 :(得分:2)

Mercurial有关键字扩展的扩展程序。有关说明和警告,请参阅KeywordExtension

答案 4 :(得分:2)

hg branch | xargs hg log -l1 --template {rev} -b

这将为您提供您正在使用的当前分支的修订号 - 对于来自不同分支的构建非常重要。

在ant文件中,这就是你需要的......

    <exec dir="${basedir}"
        executable="/usr/local/bin/hg"
        outputproperty="branch">

          <arg value="branch"/>
    </exec>

    <exec dir="${basedir}"
          executable="/usr/local/bin/hg"
          outputproperty="version">

          <arg value="log"/>
          <arg line="-l1 --template {rev} -b${branch}" />
    </exec>