Как отключить перехваты pretxncommit с ртутными очередями или histedit? - PullRequest
3 голосов
/ 04 октября 2011

У меня есть несколько ловушек pretxncommit в моем локальном хранилище Mercurial, эти ловушки используются для проверки того, что сообщение о фиксации содержит ссылку на тикет и некоторые другие проверки работоспособности.

Моя проблема в том, что когда я пытаюсь использовать ртутные очереди, такие команды, как qnew, пытаются запустить эти перехваты, а одна из проверок билетов не проходит, я вижу ту же проблему с histedit и подобными расширениями.

Почему с этими командами выполняются ловушки pretxncommit? Они запускают какой-то внутренний коммит?

Как я могу заставить эти хуки запускаться только при коммитах?

Ответы [ 3 ]

2 голосов
/ 05 октября 2011

Да, qnew создает реальный коммит и, таким образом, вызывает все соответствующие хуки фиксации. Вы можете убедиться в этом сами, временно отключив MQ, когда у вас есть исправление MQ и просматривая журнал.

Невозможно сделать так, чтобы хук pretxncommit применялся только к некоторым командам, кроме как с помощью фальсификации присяжных с другими хуками:

$ cat .hg/hgrc
[hooks]
pre-qnew = touch .hg/skiphook
post-qnew = rm .hg/skiphook
pretxncommit = test -e .hg/skiphook || echo not skipping
$ hg rm README  # make some change
$ hg qnew asdf  # no hook
$ hg qpop
$ hg rm README
$ hg ci -m asdf
not skipping

Здесь наш хук pretxncommit проверяет, что определенного файла не существует, прежде чем запускать его (тривиальный) хук, а хуки pre- / post-qnew создают файл и очищают его.

1 голос
/ 14 октября 2013

Функция abort_commit_to_wrong_branch в https://stackoverflow.com/a/19349636/350713 демонстрирует подход к запуску ловушки только для «реального» коммита, а не для фиксации MQ. Идея состоит в том, чтобы проверить атрибут _committingpatch в repo.

Если repo имеет атрибут «_committingpatch», то выполняется MQ-коммит. Соответствующая строка

if hasattr(repo, "_committingpatch"):

Это упоминается в функции newcommit в http://hg.intevation.org/mercurial/crew/file/7032dcff290c/hgext/mq.py#l293

0 голосов
/ 04 октября 2011
  • pretxncommit работает с всеми изменениями (записывается) внутри репо
  • если вы хотите игнорировать mq-операцию, вы можете найти родителей изменений и посмотреть, является ли это потомком тега qparent / qbase или посмотрите на WC. Что-л. как (грязно с головы, не из теста) hg id -tr.

Или (возможно, бред) - когда вы работаете с MQ, вы всегда работаете с qtip, не так ли?

>hg parents
...
tag:         qtip
tag:         tip
..
...