编辑制作了这个基本钩子以防止分支名称和提交消息 bugID 不匹配。https://gist.github.com/2583189
所以基本上这个想法是,如果分支名称类似于 bug_123 或 feature_123,则挂钩应将“BugID:xyz”附加到提交消息的末尾。但是,我在找出如何执行此操作时遇到问题,因为大多数 pretxncommit 示例人们不想改变变更集描述。
这就是我到目前为止所拥有的。它使用正确的消息更新 .hg/commit.save,但此消息永远不会传输到提交。但是,它会显示在下一次提交的默认消息框 (tortoisehg) 中。也许 pretxncommit 不是正确的钩子?
我可以使用 precommit 钩子,读取 commit.save 和 repo['tip'].branch() 文件并更改它,如果可以,我从哪里获取分支名称?
#
# Fogbugz automaticically add BugID:123 to commit messages based on branch names.
# Your branch name must be in the format feature_123_description or bug_123_description
#
import re
import mercurial, sys, os
_branch_regex = re.compile('(feature|bug|case|bugid|fogbugz)_(\d+)')
_commit_regex = re.compile(r'\b(?P<case>(review|case|bug[zs]?(\s| )*(id)?:?)s?(\s| )*([#:; ]| )+)((([ ,:;#]|and)*)(?P<bugid>\d+))+',re.I)
def pretxncommithook(ui, repo, **kwargs):
ui.write('hook pretxncommithook running from fogbugz.py\n')
"""
Checks a single commit message for adherence to commit message rules.
To use add the following to your project .hg/hgrc for each
project you want to check, or to your user hgrc to apply to all projects.
[hooks]
pretxncommit.fogbugz = python:fogbugz.pretxncommithook
"""
hg_commit_message = repo['tip'].description()
commit_has_bugid = _commit_regex.match(hg_commit_message) is not None
match = _branch_regex.match(repo['tip'].branch())
if match:
hg_commit_message = hg_commit_message + ' BugID:'+ match.groups()[1]
#hg_commit_message needs to be escaped for characters like >
os.system('echo ' + hg_commit_message + ' > .hg/commit.save')
在一个稍微不相关的注释中,如果 Fogbugz/Kiln 团队的任何人看到这个......请更新您的软件以读取分支名称,我不需要在每个该死的提交上放置 BugID:x。首先,它浪费了我的时间。其次,如果案例 ID 输入错误,它不会出现在错误上,而不会引起很多混乱。许多开发人员使用每个错误/功能系统的分支。这是我工作的公司政策。雾虫很烂。