2012-01-23 23 views
4

Windows 2008 64ビット版とIIS上にMercurial hgwebを設定しました。リポジトリの場所はネットワーク共有です。pythonフックからmercurialコマンド( "hg update")を呼び出してください。

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

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

Pythonフックを使用して水銀コマンドを呼び出す例がありますか?これはhgrcですべて実行できますか、外部の.pyファイルが必要ですか?

答えて

3

Martinの答えに触発されて、私はいくつかの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'])

3

Python拡張機能のために外部の.pyファイルが必要です。 Mercurialはコマンドラインから起動されたかのように内部APIを使用するには、その後、これはMercurialの1.9後の構文です

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

使用しています。以前のバージョンでは、あなたがrequestまたはdispatchに渡すリストは、コマンドラインでhg次の引数である

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

を使用します。

+0

ありがとうマーティン - 私も使用できるmercurial.commandsモジュールがあることを発見した。それを働かせてください - 下の私の答えを見てください。 –

+0

@LeeAtkinson:それはまた、エレガントなソリューションです! –

関連する問題