Mercurial钩子 - 在钩子之间传递信息?

时间:2012-03-07 23:58:00

标签: mercurial mercurial-hook

我目前在我的mercurial项目中有一个pre-commit钩子,它允许用户根据需要更新项目的版本号(例如1.01.0.1或{{ 1}}或1.1)。他们选择其中一个选项,钩子在提交之前更新项目文件中的一个版本号。

当我运行2.0时,此挂钩会运行并使用新版本号更新相关文件,然后执行提交。

我想添加钩子,以便它也调用hg commit

但是,我无法将其添加到hg tag <new_verson_number>挂钩,因为在调用提交之前,标记将被添加,导致标记为过时的一个修订版本

我想将pre-commit命令添加到hg tag挂钩(在提交后运行),以便事件序列如下:

  • commit
  • 用户说是,我想更改版本号
  • 版本号在相关文件中更新
  • 提交发生[一切都在这里很好]
  • 如果用户更改了版本号,请运行提交挂钩:hg commit -m "my commit message"

现在,我可以添加一个提交挂钩,从其存储的文件中读取新版本号并运行hg tag <new_version_number>如果用户决定不更改版本该怎么办?数?在这种情况下,我想要添加标签,如果我盲目地运行hg tag <new_version_number>,我最终会得到我不想要的标签。

所以 - 有什么方法我可以告诉hg tag <new_version_number>钩子留下pre-commit钩子的一些信息(是否添加标签的是/否)和{{1} } hook可以用它来确定是否添加标签吗?

欢呼声。

2 个答案:

答案 0 :(得分:2)

commit挂钩如何检查上一次提交是否修改了存储版本的文件?类似的东西:

[hooks]
commit.tagversion = if hg log -r $HG_NODE --template '{files}' | grep -q VERSION_FILE ; then hg tag $(hg cat -r $HG_NODE VERSION_FILE) ; fi

我还没有对它进行过测试,但是它应该可以使用它。

答案 1 :(得分:1)

您可以提取要添加的标记名称,然后在添加之前检查hg tags中是否已存在该标记名称。这也会遇到开发人员手动修改版本号的情况。