4

Mercurial インプロセス フックを Windows で実行しようとしています。
問題はフックの書き方ではありません(既存のものを使用したいのですが、この場合は Mercurial 統合用のBugTracker.Netのフックです。ファイルへの直接リンクは見つかりませんでしたが、ここでBT.net をダウンロードします。「mercurial」サブフォルダーにあります)。
問題は、Mercurial にそれを実行するように指示する方法です。

ドキュメントを読むのにかなりの時間を費やしましたが、今は立ち往生しています。
(Pythonの特定の知識があればおそらく簡単でしょう-私は持っていません)

hgrc ファイル (リポジトリの .hg フォルダー内) に行を挿入する必要があることはわかっています。

HG Bookに次のような例があります。

[hooks]
commit.example = python:mymodule.submodule.myhook

Mercurial サイトには別の例があり、次のようになります。

[hooks]
changegroup = /path/to/changegrouphook

今、私は「着信」フックが欲しいので、少なくとも私はこれをしなければならないことを知っています:

[hooks]   
incoming.btnet = X

問題は「X」を求めることです。
ファイル名はhg_hook_for_btnet.pyで、ファイルには次のような行があります。

def debug_out(s):

それは「機能」自体の名前だと思います。
したがって、私の行は次のようになります。

[hooks]   
incoming.btnet = python:hg_hook_for_btnet.debug_out

しかし、プッシュすると[Errno 2] No such file or directoryというエラー メッセージが表示されます。
すでにさまざまなバリエーションを試しましたが、うまくいかず、何が間違っているのかわかりません。

  • 最初にpython:が必要ですか?
  • ファイル拡張子.pyを指定する必要がありますか?
  • Mercurial サイトの例 (上記参照) に示されているように、/path/to/...は必要ですか?
  • はいの場合、パスの正しい構文は何ですか? ( c:\MyRepo\だけでは機能しません - Python では構文が異なる必要があります)

また、フック ファイルを正しいフォルダに配置しましたか?
現在、リポジトリのメイン フォルダー (.hg フォルダーと同じレベル) にあります。


編集:

マーティン、私はこれを次のように変更しました:

[hooks]
incoming.btnet = python:~c:\HG\MyRepo\hg_hook_for_btnet.py:debug_out

今、別のメッセージが表示されます: [ Errno 22] 引数
が無効です。repoui

では、これはフック スクリプトが壊れているということですか?
(私が言ったように-私はPythonについて何も知りません。これはオープンソースのバグトラッカーからの既存のフックスクリプトです)


編集2:

インプロセスと別のプロセスに関する混乱をお詫びします-違いがあることは知っていますが、フックがPythonで記述されている場合、自動的にインプロセスである必要があると想定しました(間違っていたことがわかりました:-)

さて、編集した回答の構文で、スクリプトは少なくとも実行されます。
私はPython 2.7をインストールしており(ここで質問する前にすでにインストールしています)、スクリプトの最初の行を#!C:\Python27\python.exe.
今、私はこれを取得します:

running hook incoming.btnet: c:\HG\MyRepo\hg_hook_for_btnet.py
warning: incoming.btnet hook exited with status 1

したがって、スクリプトは実行されますが、まだいくつかのエラーがあります。
これは Bugtracker.NET 関連の問題のようです。そのため、BT.NET メーリング リストでさらにアドバイスを求めます。
でも、助けてくれてありがとう。あなたがいなかったら、私はここまで来れなかったでしょう!

4

1 に答える 1

6

使用する必要があります

[hooks]
incoming.btnet = python:~/path/to/hg_hook_for_btnet.py:debug_out

そして次のように定義debug_outします

def debug_out(ui, repo, **kwargs):
    # ...

HG ブックで説明されているように -- すべてのフックはuirepo引数といくつかの追加のフック固有の引数を使用して呼び出されます。Mercurial APIページではui、引数と引数で何ができるかを説明していrepoます。


編集:ああ...私は今スクリプトを見てきました。インプロセスの Mercurial フックとして実行するようには設計されていません。代わりに、別のプロセスとして実行されるように設計されています。したがって、使用する必要があります

[hooks]
incoming.btnet = c:\HG\MyRepo\hg_hook_for_btnet.py

hg.exeスクリプトの指示に従っていることを確認してください。バイナリと Python インタープリターへのパスの設定について説明しています。後者は、作成者が Python をインストールすることを期待していることを意味します。スクリプトには電子メール アドレスがあります -- Corey Trager に直接連絡するか、BugTracker.NET メーリング リスト経由で連絡することをお勧めします。これはバグトラッカーなので、これを報告できる適切な場所があると思います! :-)

于 2010-07-22T12:45:11.990 に答える