4

MercurialリビジョンIDをMavenビルドに組み込む方法がわかりません(理想的には、jarファイルと戦争のマニフェストにそれを入れたいです)。

私が見つけた最も近い解決策は次のとおりです。

mvn -DbuildNumber=`hg id -i`

これは、Windowsや私のHudsonサーバーでは実際には機能しません。幸いなことに、Hudsonは私のビルドにタグを付けていますが、ビルドにもMercurial changset IDがタグ付けされている場合は、もう少し保証が必要です。

4

2 に答える 2

4

この前の質問と受け入れられた回答からのリンクを見てください。buildnumber:hgchangeset基本的に、 Mercurialでゴールを使用changesetして、のコンテンツを持つプロパティを取得することを除いて、同じことを実行しますhg id -i

于 2010-10-14T15:24:14.270 に答える
1

残念ながら、hg id -i長すぎて使用できません。正確なビルド番号を計算するスクリプトを作成しました。ただし、2つの例外があります。ブランチに以前のリリースがなかった場合、それは有効になりません。ローカルリポジトリに変更がある場合、それは有効ではありません。ビルドスクリプトでは、ビルドが発生するたびに「xxUNSTABLE」としてマークします。

REL_PATTERNを使用して、実際のリリースとしてマークされた現在のブランチの最後のタグを取得します。次に、そのリリースからのコミットログ数とそのリリース以降のブランチへのすべてのコミットを追跡して、ビルド数を計算します。

#!/bin/bash
REL_PATTERN="release-[0-9]*\.[0-9]*\.[0-9]*"
BRANCH=$( hg branch )
CURR_REV=$( hg id -n )
if [  "${CURR_REV: -1}" = "+" ] ; then
  echo "ERROR: This workspace contains uncommitted code. Cannot calculate build number" >&2
  echo "UNSTABLE"
  exit 1
fi
RELEASE=$( hg log --rev="branch($BRANCH) and tag() and 1:$CURR_REV" -T "{tags} {rev}\n"|grep "${REL_PATTERN} "|tail -1 )
if [ "$RELEASE" = "" ] ; then
  echo "ERROR: Unable to locate version tag" >&2
  echo "UNSTABLE"
  exit 1
fi
RELEASE_REV=$( echo $RELEASE|cut -f 2 -d ' ' )
RELEASE_TAG=$( echo $RELEASE|cut -f 1 -d ' ' )
REVS=$( hg log -P $RELEASE_REV -b $BRANCH -T "{rev}\n"|wc -l )
BUILD=$( hg log -r1:$CURR_REV -P $RELEASE_REV -b $BRANCH -T "{rev}\n"|wc -l )
echo "BRANCH=$BRANCH" >&2
echo "CURR_REV=$CURR_REV" >&2
echo "RELEASE_REV=$RELEASE_REV" >&2
echo "RELEASE_TAG=$RELEASE_TAG" >&2
echo "BUILD=$BUILD" >&2
echo $BUILD
于 2018-02-05T14:34:53.187 に答える