Java: как получить текущий номер набора изменений для использования в программе - PullRequest
8 голосов
/ 10 мая 2010

Я недавно начал использовать Mercurial для контроля версий в проекте Java. Когда я запускаю мою программу, входные параметры, которые она использовала для получения определенных выходных данных, записываются в определенный файл. Было бы хорошо, если бы я мог добавить текущий номер набора изменений (с указанием версии моей программы) к этому выходному файлу.

Какой самый простой способ сделать это в Windows? Я мог бы написать простой синтаксический анализатор Java для извлечения вывода первой строки команды hg log -l 1, но, возможно, есть более простой способ (т. Е. Меньше строк кода)?

Ответы [ 5 ]

10 голосов
/ 11 мая 2010

Вы можете использовать hg identify.

hg id должно быть на этапе упаковки, когда источники были зафиксированы, и вы генерируете упакованную (jar) версию вашего приложения.
На этом этапе вы можете создать файл version.txt с такой информацией.

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

(см., Например, «идентификация сборки» для Python )

7 голосов
/ 12 мая 2010

Поскольку вы работаете в Java-проекте, это может иметь отношение к вам. Я использую эту цель Ant для отображения информации о версии (идентификатор набора изменений Mercurial) в списке приложений на странице Tomcat Manager. Я просто помещаю идентификатор набора изменений в элемент * display-name xml в моем файле web.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 голосов
/ 22 марта 2011

рт. Ст. | 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>
2 голосов
/ 10 марта 2011

Mercurial имеет расширение для расширения ключевых слов. См. KeywordExtension для инструкций и предупреждений.

2 голосов
/ 11 мая 2010

Вот мнение разработчиков Mercurial: Замена ключевых слов - почему вам это не нужно

...