Использование хуков и команд обтекания в Mercurial
Каковы относительные плюсы и минусы использования хуков по сравнению с использованием расширения, заключающего в себе команду для конкретной задачи?
Другими словами, каковы критерии принятия решения, использовать ли хуки или переносить команды?
Пожалуйста, также перечислите случаи, когда один подход является единственным вариантом. Один случай, о котором я могу подумать, это добавить новые аргументы для существующих команд. Вы также можете изменить / удалить аргументы, например, я по умолчанию log
в log -g
но graphlog
прерывается при наличии некоторых "несовместимых" аргументов (см. graphlog.check_unsupported_flags
), поэтому я добавил log
обертка для удаления -g
в тех случаях, потому что принудительный аборт является преступлением против человечества.
Такое чувство, что крючки более чистые. Хиты Python запускаются в процессе hg, поэтому проблем с производительностью нет. И хотя это легко использовать extensions.wrapcommand
для создания командных оболочек тривиально создавать / отключать хуки и настраивать порядок их применения (в первую очередь они должны быть автономными).
А вот цитата из hgrc doc, которая рекомендует стандартные перехваты над перехватами команд pre / post, но это также относится и к перехватам через оболочку:
... хуки типа "commit" будут вызываться во всех контекстах, которые генерируют фиксацию (например, тег), а не только команду фиксации.
Также я предполагаю, что хуки не подпадают под действие GPL (или они есть?), Тогда как оболочки команд в расширениях таковы.
(Я надеюсь, что пользователь 1.5k+ может создать mercurialhooks
тег. Git фанаты избили нас githooks
.)
1 ответ
Я не могу говорить о проблемах лицензирования, но самое большое различие между ловушкой и расширением состоит в том, что ловушка может быть написана на любом языке, тогда как расширения всегда - python.
Если кто-то пишет на python, то есть небольшая разница между хуком и расширением:
- любой может углубиться в ртутные внутренние органы
- оба требуют, чтобы пользователи изменили свои
.hgrc
чтобы включить их - оба могут обернуть / перехватить команды
Я думаю, что ваша модификация аргумента команды журнала может быть сделано с pre-log
Крюк в дополнение к тому, чтобы быть сделано в качестве расширения.
TL; DR: если вы пишете на python, разница невелика, и если вы не хуки, ваш единственный вариант.