編集ブランチ名とコミットメッセージのバグIDの不一致を防ぐために、この基本的なフックを作成しました。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 を付ける必要はありません。まず第一に、それは私の時間を無駄にします。第 2 に、ケース ID が正しく入力されていない場合、多くの操作を行わないとバグに表示されません。多くの開発者は、バグ/機能システムごとにブランチを使用しています。私が働いている会社の方針です。Fogbugzは最悪です。