9

コミットがメイン リポジトリにプッシュされるときに実行される Mercurial フックを作成しようとしています。以下のようにpythonスクリプトを作成しました。

# commit.py

Mercurial インポート ui、hg から
mercurial.i18n から gettext を _ としてインポート

def getV1ID(ui, repo, **kwargs):
    ui.write("フックが機能します!!!")
    v1id = ui.prompt('VersionOne ID を入力してください')
    ui.write('VersionOne ID:'+v1id)

commit.pyコードがメイン リポジトリにプッシュされる前に実行する必要があるメカニズムが含まれているため、ブランチごとにこれが複製されます。これらの事前プッシュ メカニズムがパスした場合にのみ、プッシュが成功するはずです。ユーザーはローカルの commit.py を変更して、作業中のプロジェクトに応じてこれらの事前プッシュ操作のサブセットのみを実行し、各ユーザーが一度に複数のプロジェクトに作業することができます。そのため、フォルダーcommit.pyに常駐できるグローバル python スクリプトにすることはできません。.hg

Mercurial をローカルcommit.pyで実行するために、mercurial.ini ファイル (C:\Users\UserName\mercurial.ini 内) に次のステートメントを追加しました。

【フック】
prechangegroup = python:./commit.py:getV1ID

pythonスクリプトは、.hgフォルダー内に配置すると実行されますが、これを実行すると実行されません。この問題を明らかにするのを手伝ってくれる人はいますか? どうもありがとう。

4

1 に答える 1

6

Mercurial の IRC 経由でこのソリューションを取得しました。私のコメントの1つで述べたように、フックのスクリプトは絶対パスとして指定するか、PYTHONPATHのpythonモジュールにする必要があります。したがって、pmezardローカルを呼び出す固定スクリプトを作成する必要があることを IRCから提案されましたcommit.py。これは、以下に示すように実行できます。

で、以下に示すように、ユーザーのホームのディレクトリにmercurial.ini存在する「グローバル」python-script にフックします。.hg

【フック】
preoutgoing = python:%USERPROFILE%\.hg\commit.py:実行

「グローバル」な python-script はcommit.py次のようになります。

Mercurial インポート ui、hg から
OS のインポート

クラス Chdir:
    def __init__(自己、新しいパス):
        self.savedPath = os.getcwd()
        os.chdir(新しいパス)

    def __enter__(自己):
        自分を返す

    def __exit__(自己、型、値、トレースバック):
        os.chdir(self.savedPath)

def run(ui, repo, **kwargs):
    kwargs['ソース'] == 'プッシュ' の場合:
        Chdir(repo.root) を dirchanged として:
            ローカルコミットをインポート
            sys.exit(localcommit.main(ui, repo, **kwargs))

リポジトリのlocalcommit.pyディレクトリにある は、globalコミット スクリプトによって実行されるため、すべてのリポジトリは独自のカスタマイズされたコミット スクリプトを維持できます。

于 2011-07-26T16:07:57.413 に答える