-1

コミットを検査し、おそらくそれにいくつかの変更を加えてから、変更をコミットする 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つの方法を考えることができますが、それらが可能かどうかはわかりません:

  1. 変更グループが完了してロックが解放された後に実行されるフックがあれば、そこでコミットを実行できます。
  2. 着信チェンジグループにチェンジセットを追加します。
4

2 に答える 2

0

フックは競合などを処理できない外部プロセスであるため、変更セットをフックで変更しようとするべきではありません。さらに、それは可能でも望ましいことでもないと思います。元の変更セットはそのまま残り、いつか重複の問題が発生する可能性があります。

あなたができることは、いくつかの基準に基づいて着信変更セットを承認するかどうかです。変更セットが承認されない場合、開発者は自分のリポジトリでそれを変更してから再度プッシュする必要があります。

于 2013-05-23T13:49:27.790 に答える