Mercurial pre commit hook - PullRequest
       0

Mercurial pre commit hook

16 голосов
/ 12 ноября 2010

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

Ответы [ 3 ]

21 голосов
/ 12 ноября 2010

Глава 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, который проверяетзамыкающий пробел.Этот крючок короткий, но не очень полезный.Он завершается со статусом ошибки, если изменение добавляет строку с конечным пробелом в любой файл, но не печатает какую-либо информацию, которая может помочь нам идентифицировать нарушающий файл или строку.У него также есть приятное свойство не обращать внимания на неизмененные строки;только строки, которые вводят новые пробелы в конце, вызывают проблемы.

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

5 голосов
/ 27 января 2014

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

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

Эта ловушка не будет выполнена, если ваши источники содержат строку "NOCOMMIT"

5 голосов
/ 03 марта 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...