Что является лучшим способом зарегистрироваться в сценарии, если там незафиксированы изменения в рабочем дереве mercurial.
(путь я был бы с git diff --quiet
в мерзавце)
В mercurial 1.4 и более поздних версиях вы можете использовать команду сводки, которая выдает такой вывод при наличии изменений:
$ hg summary
parent: 0:ad218537bdef tip
commited
branch: default
commit: 1 modified
update: (current)
и этот post-commit:
$ hg summary
parent: 1:ef93d692f646 tip
sfsdf
branch: default
commit: (clean)
update: (current)
Или же вы можете установить расширение prompt prompt и сделать что-нибудь вроде этого:
$ hg prompt '{status}'
, что выдаст !
или ?
или ничего подобного.
Оба эти вывода, конечно, являются просто альтернативными текстовыми выходами. Я не смог найти ничего, что использовало бы код выхода напрямую, но так как $? проверяет последнюю команду в трубе, которую вы могли сделать?
hg summary | grep -q 'commit: (clean)'
, которая установит $? ненулевое значение, если какие-либо изменения не будут сделаны:
$ hg summary | grep -q 'commit: (clean)' ; echo $?
0
$ echo more >> that
$ hg summary | grep -q 'commit: (clean)' ; echo $?
1
Должно быть что-то более элегантное, чем просто
[ `hg st |wc -l` -eq 0 ] && echo hi
Вы также можете выполнить hg id
. Если хэш заканчивается на +
, это означает, что в рабочей копии есть изменения. Это должно работать даже со старыми версиями hg.
Похоже, вы уже используете zsh; так вот, пару дней назад я помог обновить поддержку Mercurial для встроенного VCS_INFO для ввода информации о VCS в подсказку. В следующем выпуске планируется поддержка отображения изменений в рабочем каталоге (среди прочего). Если вы не хотите ждать, вы можете взять необходимые файлы из CVS.
На данный момент моя подсказка включает следующее (используя только встроенную функциональность zsh):
(hg)[1801+ branchname somemq.patch, anycurrentbookmarks]