0

多くの人が接続するバザーサーバーがあります。すべてのユーザーに対していくつかの pre-commit フックを実行したいのですが、接続しているすべてのコンピューターを制御することはできないため、これらのフックをサーバーで実行するのが最も理にかなっています。これは簡単な作業だと思っていましたが、今は行き詰まっています。

私の現在のステータスは次のとおりです。

  • ワークステーションにスクリプトをインストールすると、フックが機能します。
  • サーバーにスクリプトをインストールすると、そこで行われたコミットに対して機能します。
  • サーバーにインストールしてワークステーションにコミットすると、ロードされますが無視されます。

BZR_PLUGIN_PATHサーバーとサーバーの両方でスクリプトを実行しようとしましたが~/.bazaar/plugin、そうすると、ログに次のように表示されます。

0.112  looking for plugins in /home/me/.bazaar/plugins
0.122  looking for plugins in /usr/local/lib64/python2.6/site-packages/bzrlib/plugins
0.123  Plugin name my_test_hook already loaded

これはリモート ワークステーションからのものであるため、プラグインは明らかにロードされますが、実行されません。私はそれを馬鹿にしたので、それが現在行っていることは次のとおりです。

def my_test_hook (local, master, old_revno, old_revid,
    future_revno, future_revid, tree_delta, future_tree):
    raise TipChangeRejected("Rejected")

したがって、それが実行されているときは明らかです。誰かがこれを機能させるために何をする必要があるか教えてもらえますか? つまり、ワークステーションで行う場合"bzr ci -m '...'"、サーバーのフックでコミットをキャンセルして「拒否」と言う必要がありますか。

残念ながら、ドキュメントはあまり役に立ちませんでした。

4

1 に答える 1

0

答えは: できません。

リモートホストはポストプッシュのみを認識し、コミットを停止するには遅すぎるため、そのようなフックはすべてのクライアントでローカルに実行する必要があります。

于 2013-10-14T12:08:57.053 に答える