Меркурийный захват
Как я могу настроить привязку до фиксации, которая будет искать строку в файлах с фиксацией, и если найдено, остановите фиксацию?
Ответы
Ответ 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"