Меркурийный захват

Как я могу настроить привязку до фиксации, которая будет искать строку в файлах с фиксацией, и если найдено, остановите фиксацию?

Ответы

Ответ 1

Глава 10 Меркуриальная книга охватывает это точно

$ cat .hg/hgrc
[hooks]
pretxncommit.whitespace = hg export tip | (! egrep -q '^\+.*[ \t]$')
$ echo 'a ' > a
$ hg commit -A -m 'test with trailing whitespace'
adding a
transaction abort!
rollback completed
abort: pretxncommit.whitespace hook exited with status 1
$ echo 'a' > a
$ hg commit -A -m 'drop trailing whitespace and try again'

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

Просто измените регулярное выражение из '^\+.*[ \t]$' на любую строку, которую вы ищете.

Ответ 2

Ответ Ry4an почти правильный:) но вам нужно заменить "hg export tip" на "hg diff".
tip - последний коммандовый набор изменений, но интересуются локальными неуправляемыми изменениями - так что diff - это то, что вам нужно. для моих нужд я добавил следующее в свой hgrc

precommit.removeDebug = hg diff -S | grep -v '^-' | (! egrep '(var_dump)|(exit)|(print_r)')

-S включает subrepos (maye не нужно, и может быть все еще неисправен).
grep -v '^ -' удаляет строки из diff, которые указывают на удаленные строки. я удалил -q, поэтому я, по крайней мере, имею идею, что удалить, но, к сожалению, этот метод не может напечатать вам файл и linenumber события (поскольку он передан по каналам). возможно, у кого-то есть лучший способ сделать это.

Ответ 3

Кстати, в Windows вы можете использовать

[hooks]
pretxncommit.nocommit = hg export tip | findstr NOCOMMIT && EXIT /B 1 || EXIT /B 0

Этот крючок завершится неудачно, если ваши источники содержат строку "NOCOMMIT"