4

MercurialhgwebをWindows200864ビットおよびIISでセットアップしています。リポジトリの場所はネットワーク共有です。

リポジトリにフックを作成して、changeroupで「hgupdate」コマンドを発行したいと思います。外部フックを使用できません。これは、作業ディレクトリとしてネットワーク共有を使用してcmd.exeを起動するためです(また、cmd.exeはネットワーク共有をサポートしていません)。

したがって、Mercurialコマンドを呼び出すPythonフックの例を探しています。Mercurial.commandsモジュールがあることに気付きましたが、Webで例を見つけることができず、Pythonの経験もあまりありません。

Pythonフックを使用してMercurialコマンドを呼び出す例はありますか?これをすべてhgrcで行うことは可能ですか、それとも外部の.pyファイルが必要ですか?

4

2 に答える 2

3

.pyPython拡張機能用の外部ファイルが必要です。Mercurialがコマンドラインから呼び出されたかのように内部APIを使用するには、次を使用します。

 from mercurial.dispatch import dispatch, request
 dispatch(request(['update']))

これは、Mercurial1.9以降の構文です。以前のバージョンでは、

 from mercurial.dispatch import dispatch
 dispatch(['update'])

渡すリスト、requestまたはコマンドラインにdispatch続く引数です。hg

于 2012-01-23T13:39:24.647 に答える
3

マーティンの答えに触発されて、私はPythonを書こうと思ったのですが、これがどうやってそれを機能させることができたかです。Mercurial 2.0.2とmercurial.commandsモジュール(AFAIKはMercurial Pythonパッケージに含まれています)を使用しています。

サーバー上にmyhook.pyファイルを作成しました。

import mercurial.commands

def update(ui, repo, **kwargs):
    mercurial.commands.update(ui, repo)

次に、サーバー上の.hg / hgrcファイルに、次を追加しました。

[hooks]
changegroup = python:C:\path\to\my\myhook.py:update

コマンドが実行される行を変更して、特に「tip」に更新します。名前付きブランチを使用する場合は、上記のようにコマンドは効果がありません。これが良いと思います:commands.update(ui、repo、repo ['tip'])

于 2012-01-23T17:10:43.540 に答える