Если вы используете Python 2, вы хотите использовать hglib
.
Я не знаю, что использовать, если вы используете Python 3, извините. Возможно hgapi
.
Содержание этого ответа
- API Mercurial
- Как использовать hglib
- Почему hglib - лучший выбор для пользователей Python 2
- Если вы пишете ловушку, этот обескураженный внутренний интерфейс очень удобен
API Mercurial
У Mercurial есть два официальных API.
- Сервер команд Mercurial. Вы можете общаться с ним из Python 2, используя пакет
hglib
( wiki , PyPI ), который поддерживается командой Mercurial.
- Интерфейс командной строки Mercurial. Вы можете поговорить с ним через
subprocess
, или hgapi
, или через некоторое время.
Как использовать hglib
Установка:
pip install python-hglib
Использование:
import hglib
client = hglib.open("/path/to/repo")
commit = client.log("tip")
print commit.author
Больше информации об использовании на странице вики hglib .
Почему hglib - лучший выбор для пользователей Python 2
Поскольку он поддерживается командой Mercurial, и это то, что команда Mercurial рекомендует для взаимодействия с Mercurial.
Из вики Mercurial следующее утверждение о взаимодействии с Mercurial:
Для подавляющего большинства стороннего кода наилучшим подходом является использование опубликованного, документированного и стабильного API Mercurial: интерфейса командной строки. Альтернативно, используйте CommandServer или библиотеки, основанные на нем, чтобы получить быстрый, стабильный, не зависящий от языка интерфейс.
Со страницы командного сервера:
[Командный сервер позволяет] сторонним приложениям и библиотекам взаимодействовать с Mercurial по каналу, который исключает накладные расходы при запуске каждой команды. Затем библиотеки могут инкапсулировать генерацию и синтаксический анализ команд, чтобы представить для этих команд соответствующий API язык.
Интерфейс Python для командного сервера Mercurial, как сказано, 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
.