4

我不知道如何将 Mercurial 修订 ID 放入我的 Maven 构建中(理想情况下,我希望它在我的罐子和战争的清单中)。

我能找到的最接近的解决方案是:

mvn -DbuildNumber=`hg id -i`

这不适用于 Windows 或我的 Hudson 服务器。幸运的是,Hudson 标记了我的构建,但如果构建也使用 Mercurial changset id 进行标记,我想要更多的保证。

4

2 回答 2

4

看看这个先前的问题和接受答案的链接。基本上,您想要做同样的事情,只是您想要使用buildnumber:hgchangesetMercurial 的目标来获取changeset内容为hg id -i.

于 2010-10-14T15:24:14.270 回答
1

不幸的是,hg id -i使用时间太长了。我创建了一个脚本来计算准确的内部版本号。但是,有两个例外。如果分支上没有以前的版本,则它不能有效。如果本地 repo 有变化,那么它是无效的。在我的构建脚本中,每当发生这种情况时,我都会将构建标记为“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 回答