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] 引数
が無効です。repo
ui
では、これはフック スクリプトが壊れているということですか?
(私が言ったように-私は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 メーリング リストでさらにアドバイスを求めます。
でも、助けてくれてありがとう。あなたがいなかったら、私はここまで来れなかったでしょう!