Вызвать команду mercurial ("hg update") из ловушки Python - PullRequest
4 голосов
/ 23 января 2012

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 23 января 2012

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

3 голосов
/ 23 января 2012

Вам нужен внешний .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 в командной строке.

...