如何在提交标记之前提交文件?

时间:2012-04-12 07:57:48

标签: mercurial mercurial-hook

我希望在使用hg tag XXX时自动提升项目版本。

我在hgrc中设置了一个pretag hook(注意:为了清楚起见,我已经删除了确保它以hg root输出到VERSION的东西):

[hooks]
pretag.bump_version = (echo "$HG_TAG" > VERSION; hg commit -m "Updated VERSION to $HG_TAG" VERSION)

当我创建新标签时:

$ hg tag 1.1

我收到错误:

warning: ignoring unknown working parent <revision_id>!

我可以使用标记钩子,但是成功,但是VERSION号码正好比标签更早一个版本:这意味着更新到标记的版本,然后构建将导致产品的版本号(取决于在VERSION文件上)将是不正确的。

有没有更好的方法来解决这个问题?我查看了SO question #2558531,但是每次都会更新版本号:我只想在标记存储库之前更新版本号

1 个答案:

答案 0 :(得分:3)

切换到pre-tag而不是pretag挂钩。钩子pretag是一个特殊的钩子,它意识到你正在标记。相比之下,pre-tag钩子是一个通用的pre-*钩子,它在tag命令启动之前运行,并且完全没有意识到它正在标记 - 这意味着它也会更早地运行。 (甚至可以预先知道所有内容,例如pre-log)。

我让你的榜样像这样工作:

[hooks]
pre-tag.bump_version = echo $HG_ARGS > VERSION; hg commit -m "updated version to $HG_ARGS" VERSION

仅使用如下命令行:

ry4an@ry4an:~$ hg init tagtest
ry4an@ry4an:~$ cd tagtest
ry4an@ry4an:~/tagtest$ echo text > VERSION
ry4an@ry4an:~/tagtest$ hg commit -A -m initial
adding file
ry4an@ry4an:~/tagtest$ hg tag --config hooks.pre-tag='echo $HG_ARGS > VERSION; hg commit -m "updated version to $HG_ARGS" VERSION' 1.1

注意我必须将参数切换为$HG_ARGS,因为它是pre-*命令,不知道我们正在标记。详细信息位于hgrc联机帮助页。

另请注意,当我通过明确命名提交钩子时,我只提交VERSION文件。您不希望因为标记而意外提交您从之前的提交中排除的大量调试内容。