Легкий, безболезненный способ протестировать новые ртутные крючки (которые находятся в процессе) - программирование
Подтвердить что ты не робот

Легкий, безболезненный способ протестировать новые ртутные крючки (которые находятся в процессе)

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

Есть ли способ "подделать" триггер для выполнения моего крюка changegroup с текущим статусом репозитория, который будет использоваться для его параметров?

Любая помощь для оптимизации этого процесса будет очень оценена. благодаря Ник

4b9b3361

Ответ 1

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

$ hg init repo
$ hg clone repo clone

а затем настройте hook changegroup в repo. Теперь перейдите в clone и сделайте

$ echo a > a
$ hg add a
$ hg commit -m 'a file'

для настройки clone. Каждый раз, когда я хочу проверить крючок, я запускаю

$ hg push; hg  -R ../repo rollback

внутри clone. Я сохраняю это в своей истории в командной строке, чтобы просто нажать + Return, чтобы выполнить его снова и снова. hg rollback - это ключ: эффективно отменяет hg push, чтобы я мог повторять его снова и снова.

Конечно, вам нужно будет отрегулировать это по мере необходимости для вашего крючка. Если крючок проверяет имя коммиттера, используйте hg commit -u someone, чтобы установить это при необходимости. Если в группе изменений требуется более одного набора изменений, тогда совершите два или более коммитов перед нажатием - откат позаботится об удалении всех нажатых наборов изменений. Если крючок запущен hgweb, запустите

$ hg serve --config 'web.push_ssl=no' --config 'web.allow_push=*'

в одном терминале для обслуживания repo, пока вы нажимаете на него в другом терминале.

Ответ 2

Недавно я писал питон для Mercurial с использованием API. Чтобы проверить его, я сделал следующее, после запуска интерпретатора python внутри папки репозитория.

from mercurial import ui, hg
repo = hg.repository(ui.ui(), '.')
execfile('./myhook.py')
myhook(repo.ui, repo, 'hash', 'outgoing')

Где myhook - ваша функция перехвата (находится в myhook.py), hash - это хэш набора изменений, который вы хотите проверить, и outgoing - тип привязки.

Если ваш крючок не работает должным образом, вы можете изменить свой script и повторить две последние строки.