8

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

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

4

5 回答 5

10

你可以宁愿使用hg identify.

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

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

(例如,参见Python 的“构建标识”

于 2010-05-10T20:08:22.617 回答
7

由于您在 Java 项目中,因此这可能与您有关。我使用这个 Ant 目标在 Tomcat 管理器页面的应用程序列表中显示版本信息(Mercurial 变更集 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 中,显示名称xml 元素中有一个标记,如下所示:

<display-name>My Webapp @build.version.tag@</display-name>
于 2010-05-12T10:51:46.937 回答
2

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

于 2011-03-09T22:03:02.843 回答
2

汞分支 | 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>
于 2011-03-22T19:55:36.997 回答
2

以下是 Mercurial 开发人员的观点:关键字替换 - 为什么不需要它

于 2010-05-10T22:20:26.697 回答