2010-10-04 7 views
4

Каковы относительные плюсы и минусы для использования перехватчиков против использования расширения, которое обертывает команду для определенной задачи?Использование команд hooks vs. wrapping в mercurial

Другими словами, каковы критерии для определения того, использовать ли крючки или обернуть команду?

Также перечислены случаи, когда один подход является единственным вариантом. В одном случае я могу добавить новые аргументы для существующих команд. Вы также можете изменить/удалить аргументы, например, по умолчанию log - log -g, но graphlog отменяет при наличии некоторых «несовместимых» аргументов (см. graphlog.check_unsupported_flags), поэтому я добавил обертку log для удаления -g в таких случаях, поскольку принудительный аборт является преступления против человечности.

Чувствуется, что крючки более чистые. Перехватчики Python запускаются в hg-процессе, поэтому проблема с производительностью отсутствует. И хотя для создания командных оболочек легко использовать extensions.wrapcommand, тривиально создавать/отключать перехватчики и настраивать порядок их применения (они должны быть в первую очередь автономными).

А вот цитата из hgrc doc, что рекомендует стандартные крюки над командными крюками до/после, но это также относится и к крючкам над оберткой:

... крючки, как «совершить» будут называться во всех контекстах которые генерируют фиксацию (например, тег), а не только команду фиксации.

Также я предполагаю, что крючки не подвергаются GPL (или они?), Тогда как командные обертки в extensions are.

(я надеюсь, что 1.5k + пользователь может создать mercurialhooks тега. Git мальчики вентиляторных били нас githooks.)

+0

retagged, но слегка изменил имя в соответствии с соглашениями. –

+0

@Niall: спасибо! Я думаю, что мальчики-гиты не очень заботятся об условностях :) –

ответ

4

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

Если один пишет в питоне, то есть небольшая разница между крючком и расширением:

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

Я думаю, что ваша модификация аргумента команды журнала может быть выполнена с помощью pre-log ho ok в дополнение к выполнению в качестве расширения.

TL; DR: Если вы пишете на python, разница невелика, и если вы не крючки, это ваш единственный вариант.

+0

Спасибо за важную, хотя и очевидную (мне) разницу. Но как удалить аргумент команды в hook? Я попробовал сделать предварительный лог-крючок следующим образом: 'def prelogHook (ui, repo, ** kwargs): print kwargs', и он показывает только' {'args': 'log', 'hooktype': 'pre-log'} 'когда я по умолчанию' log' на 'log -g'. –

+1

Я не уверен, где, но я подозреваю, что есть ссылочный путь к ним через объект ui.В командной оболочке вы можете просто проверить «$ HG_OPTS» для несовместимых параметров, удалить «-g», если они найдены, и повторно запустить команду «hg log» с новым набором arg, а затем вернуть -1 , Не совсем изящный, но достижение цели от абсолютно внешнего крючка. –

 Смежные вопросы

  • Нет связанных вопросов^_^