Вызвать команду mercurial ("hg update") из ловушки Python

У меня установлен Mercurial hgweb на 64-битной Windows 2008 и IIS. Расположение репозиториев является сетевым ресурсом.

Я хочу создать ловушку в хранилище для выдачи команды "hg update" на чейнджер. Я не могу использовать внешний хук, так как это приведет к запуску cmd.exe с общим сетевым ресурсом в качестве рабочего каталога (и cmd.exe не поддерживает сетевые ресурсы).

Поэтому я ищу, чтобы найти пример ловушки Python, который вызывает команду Mercurial. Я заметил, что есть модуль mercurial.commands, но я не могу найти какие-либо примеры на веб-сайтах, и я не очень опытен с Python.

Есть ли примеры для вызова команды mercurial с использованием ловушки Python - и возможно ли сделать все это в hgrc, или мне нужен внешний файл.py?

2 ответа

Решение

Вдохновленный ответом Мартина, я подумал, что попытаюсь написать какой-нибудь 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(интерфейс, репо, репо ['tip'])

Вам нужен внешний .py файл для расширения Python. Чтобы использовать внутренний API, как будто Mercurial был вызван из командной строки, используйте

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

Это синтаксис после Mercurial 1.9. В более ранних версиях вы бы использовали

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

Список, который вы передаете request или же dispatch аргументы следующие hg в командной строке.

Другие вопросы по тегам