Python 2 を使用している場合は、hglib
.
Python 3 を使用している場合、何を使用すればよいかわかりません。申し訳ありません。おそらくhgapi
。
この回答の内容
- Mercurial の API
- hglib の使い方
- Python 2 ユーザーにとって hglib が最適な理由
- あなたがフックを書いているなら、その落胆した内部インターフェースは非常に便利です
Mercurial の API
Mercurial には 2 つの公式 API があります。
- Mercurial コマンド サーバー。
hglib
Mercurial チームによって管理されている( wiki、PyPI ) パッケージを使用して、Python 2 から対話することができます。
- Mercurial のコマンドライン インターフェイス。
subprocess
、 、 、またはそのようなものを介して話しかけることができますhgapi
。
hglib の使い方
インストール:
pip install python-hglib
使用法:
import hglib
client = hglib.open("/path/to/repo")
commit = client.log("tip")
print commit.author
hglib wiki ページの使用法の詳細。
Python 2 ユーザーにとって hglib が最適な理由
これは Mercurial チームによって維持されており、Mercurial チームが Mercurial とのインターフェースとして推奨しているものだからです。
Mercurial の wiki から、Mercurial とのインターフェースに関する次のステートメント:
大多数のサード パーティ コードの場合、最善の方法は、Mercurial の公開され、文書化された、安定した API、つまりコマンド ライン インターフェイスを使用することです。または、 CommandServerまたはそれに基づくライブラリを使用して、高速で安定した、言語に依存しないインターフェイスを取得します。
コマンド サーバー ページから:
[コマンド サーバーにより] サードパーティのアプリケーションとライブラリは、パイプを介して Mercurial と通信できるため、コマンドごとの起動オーバーヘッドがなくなります。その後、ライブラリはコマンドの生成と解析をカプセル化して、言語に適した API をこれらのコマンドに提供できます。
前述のように、Mercurial コマンド サーバーへの Python インターフェイスはhglib
.
ところで、コマンド ライン インターフェイスのコマンドごとのオーバーヘッドは冗談ではありません。私はかつて非常に小さなテスト スイート (約 5 つのテストのみ) を構築しました。このテスト スイートは、作成、コミットごとのコミット、マージなどの状況での少数のリポジトリの作成に使用されましたhg
。subprocess
プロジェクト全体を通して、スイートの実行時間は 5 ~ 30 秒にとどまり、ほぼすべての時間がhg
呼び出しに費やされました。
あなたがフックを書いているなら、その落胆した内部インターフェースは非常に便利です
Python フック関数のシグネチャは次のようになります。
# In the hgrc:
# [hooks]
# preupdate.my_hook = python:/path/to/file.py:my_hook
def my_hook(
ui, repo, hooktype,
... hook-specific args, find them in `hg help config` ...,
**kwargs)
ui
repo
前述の推奨されない非公式の内部APIの一部です。それらが関数の引数のすぐそこにあるという事実は、preupdate
特定のブランチ間のマージを許可しないフックの例のように、非常に便利に使用できます。
def check_if_merge_is_allowed(ui, repo, hooktype, parent1, parent2, **kwargs):
from_ = repo[parent2].branch()
to_ = repo[parent1].branch()
...
# return True if the hook fails and the merge should not proceed.
フック コードがそれほど重要ではなく、それを公開しない場合は、推奨されない非公式の内部 API を使用することを選択できます。フックが公開している拡張機能の一部である場合は、 を使用することをお勧めしますhglib
。