2

我目前pre-commit在我的 mercurial 项目中有一个钩子,它让用户可以选择更新项目的版本号,如果他们愿意的话(例如1.0to 1.0.1or 1.1or 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钩子为钩子留下一些信息commit(是否添加标签的是/否),并且commit钩子可以使用它来确定是否添加标签?

干杯。

4

2 回答 2

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

我还没有测试过它,但是那个或类似的东西应该可以工作。

于 2012-03-08T03:26:51.170 回答
1

您可以提取要添加的标签名称,然后在hg tags添加之前检查它是否已经存在。这也将捕获开发人员手动修改版本号的情况。

于 2012-03-08T07:00:18.813 回答