3

ローカルのMercurialリポジトリにいくつかのpretxncommitフックがあります。これらのフックは、コミットメッセージにチケットへの参照とその他の健全性チェックが含まれていることを確認するために使用されます。

私の問題は、マーキュリアルキューを使用しようとするqnewと、これらのフックを実行しようとしたり、チケットチェックの1つが失敗したりするとhistedit、同様の拡張機能で同じ問題が発生することです。

これらのコマンドでpretxncommitフックが実行されるのはなぜですか?彼らはある種の内部コミットを実行しますか?

これらのフックをコミットでのみ実行するようにするにはどうすればよいですか?

4

3 に答える 3

2

はい、qnewは実際のコミットを作成するため、関連するすべてのコミットフックを呼び出します。これは、MQパッチを適用しているときにMQを一時的に無効にして、ログを確認することで確認できます。

pretxncommitフックを一部のコマンドにのみ適用させる方法はありません。ただし、他のフックで何かを仮帆装する場合を除きます。

$ cat .hg/hgrc
[hooks]
pre-qnew = touch .hg/skiphook
post-qnew = rm .hg/skiphook
pretxncommit = test -e .hg/skiphook || echo not skipping
$ hg rm README  # make some change
$ hg qnew asdf  # no hook
$ hg qpop
$ hg rm README
$ hg ci -m asdf
not skipping

ここで、pretxncommitフックは、(トリビアル)フックを実行する前に特定のファイルが存在しないことを確認し、pre-/post-qnewフックがファイルを作成してクリーンアップします。

于 2011-10-05T02:23:16.660 に答える
1

https://stackoverflow.com/a/19349636/350713の関数abort_commit_to_wrong_branchは 、MQコミットではなく、「実際の」コミットでのみフックを実行するアプローチを示しています。アイデアは、の属性をチェックすることです。_committingpatchrepo

'_committingpatch'属性がある場合repo、それは進行中のMQコミットです。関連する行は

if hasattr(repo, "_committingpatch"):

これは、 http://hg.intevation.org/mercurial/crew/file/7032dcff290c/hgext/mq.py#l293の関数newcommitで 説明されています。

于 2013-10-13T20:53:54.393 に答える
0
  • pretxncommitは、リポジトリ内のすべての変更(記録可能)で機能します
  • mq-operationを無視したい場合は、チェンジセットの親を探して、それがqparent / qbaseタグの子孫であるかどうかを確認するか、WCで確認できます。Smth。like(テストからではなく、頭から汚れた)hgid-tr。

または(せん妄かもしれません)-MQを使用する場合、常にqtipを使用しますね。

>hg parents
...
tag:         qtip
tag:         tip
..
于 2011-10-04T17:03:23.900 に答える