Простой, безболезненный способ тестирования новых ртутных крючков (которые находятся в стадии разработки) - PullRequest
16 голосов
/ 06 марта 2012

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

Есть ли способ «подделать» триггер, чтобы выполнить мою ловушку группы изменений с текущим состоянием хранилища, которое будет использоваться для его параметров?

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

Ответы [ 2 ]

18 голосов
/ 07 марта 2012

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

$ hg init repo
$ hg clone repo clone

и затем настраиваю ловушку 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, пока вы нажимаете на него в другом терминале.

6 голосов
/ 02 апреля 2012

Недавно я писал Python-хук для 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 - это тип хука.

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

...