Изменить поведение основных команд Mercurial с помощью расширений? - PullRequest
4 голосов
/ 20 августа 2010

Можно ли изменить поведение основной команды Mercurial (например, hg commit или hg status), создав расширение?

Например, можно ли изменить hg commit, чтобы попросить пользователя ввести идентификатор отслеживания проблемы?

Я понимаю, что можно использовать подключаемые сценарии, но такие сценарии не распространяются через hg pull и их необходимо настраивать для каждого используемого хранилища.

Ответы [ 2 ]

4 голосов
/ 20 августа 2010

Отвечая на мой собственный вопрос

В Mercurial API предусмотрен метод extensions.wrapcommand(table, command, wrapper), который, по-видимому, обеспечивает требуемую функцию.

Изисходный код:

Оберните команду с именем `command 'в таблицу.

Замените команду в таблице команд оболочкой.Обернутая команда будет вставлена ​​в таблицу команд, указанную в аргументе таблицы.Оболочка будет вызываться как обертка (orig, * args, ** kwargs), где orig - оригинальная (обернутая) функция, а * args, ** kwargs - передаваемые ей аргументы.

Несколько примеров:

  • Расширение prompt от Стива Лоша
  • Расширение nobranch от Fog Creek
2 голосов
/ 20 августа 2010

Замечу: и расширения, и перехватчики имеют одинаковые ограничения на массовое развертывание. В обоих случаях вы должны заставить своих внутренних пользователей загрузить часть программного обеспечения, будь то хук или расширение, а затем включить его либо в hgrc в их homedir, либо в репозитории.

Как для хуков, так и для расширений вы можете распространять программное обеспечение, используя любой механизм, и можете включить их глобально в / etc / mercurial / hgrc

Расширения имеют некоторые преимущества перед хуками в отношении того, насколько глубоко они могут копаться во внутренних органах ртути, но развертывание идентично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...