コミットを検査し、おそらくそれにいくつかの変更を加えてから、変更をコミットする changegroup または pretxnchangegroup フックを使用して Mercurial リポジトリを作成しようとしています。私のフックはこれに似たようなことをします:
#!/bin/sh
if ! grep -q foobar foobar; then
echo foobar >> foobar
hg add foobar
hg commit -m 'added foobar to foobar'
fi
しかし、フックを持つリモートリポジトリにプッシュすると、ロックを待ってハングし、それを強制終了する必要があります:
$ hg push
pushing to /tmp/a
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
foobar already tracked!
waiting for lock on repository /tmp/a held by 'duck:18140'
^Ctransaction abort!
rollback completed
interrupted!
interrupted!
変更グループはリポジトリの書き込みロックを保持する必要があり、フック内にあるコミットも保持する必要があることを理解しているため、これは理にかなっています。しかし、どうすればこの問題を回避できますか?
うまくいくかもしれない2つの方法を考えることができますが、それらが可能かどうかはわかりません:
- 変更グループが完了してロックが解放された後に実行されるフックがあれば、そこでコミットを実行できます。
- 着信チェンジグループにチェンジセットを追加します。