Каков наилучший способ проверить скрипт, если в рабочем дереве Mercurial есть незафиксированные изменения.Тестирование нефиксированных изменений в mercurial
(как я бы с git diff --quiet
в мерзавца)
Каков наилучший способ проверить скрипт, если в рабочем дереве Mercurial есть незафиксированные изменения.Тестирование нефиксированных изменений в mercurial
(как я бы с git diff --quiet
в мерзавца)
В ртутный 1.4, а затем вы можете использовать команду сводки, которая дает такой вывод когда существуют изменения:
$ hg summary
parent: 0:ad218537bdef tip
commited
branch: default
commit: 1 modified
update: (current)
и этот пост фиксации:
$ hg summary
parent: 1:ef93d692f646 tip
sfsdf
branch: default
commit: (clean)
update: (current)
В качестве альтернативы, вы можете установить prompt extension и сделать что-то вроде этого:
$ 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 в вашем приглашении. Слан для следующего выпуска - поддержка для отображения изменений в рабочем каталоге (между прочим). Если вы не хотите ждать, вы можете grab the necessary files from CVS.
На данный момент моя подсказка включает это (используя только встроенные функции ЗШ):
(hg)[1801+ branchname somemq.patch, anycurrentbookmarks]
Спасибо! Это звучит как хак, но на самом деле, похоже, работает :) Хм. Прошло некоторое время с тех пор, как я последний раз видел CVS в использовании;) –
Это не работает, если вы добавили новый файл, который не был добавлен в репозиторий. – etalon11
Я использую:
hg status -m -a -r -d -u
Если никаких изменений с отслеживаемых файлов, то вывод команды не пустую строку.
Работает хорошо! Я добавил параметр «-u» для отслеживания неизвестных файлов, которые также относятся к незафиксированным изменениям. – etalon11
Я использую этот Баш-фрагмент кода в течение некоторого времени:
if [[ $(hg status 2>/dev/null) ]]
then
# do something
fi
Это вызвано также отсутствующими файлами, которые могут быть не такими, какие вы хотите. – xixixao
Оба id
и summary
медленнее, чем status
, так что это самый быстрый способ, которым я в настоящее время известно, игнорируя неотслеживаемые файлы:
[[ -z `hg status | grep -v '^?'` ]] && echo no-changes || echo has-changes
Спасибо за ваш ответ. Я закончил с (в zsh) '[[" ничего не изменилось "=' 'hg ci -m tick'']] || hg push'. И мне это не нравится, потому что в какой-то будущей версии Mercurial может измениться точная формулировка (что также относится к вашему сводному решению hg).Да, 'hg prompt '{status}'' должен работать нормально, за исключением того, что я предпочел бы использовать функциональность ядра hg, потому что скрипт будет работать на внешнем хостинге, поэтому мое пользовательское расширение (таким образом обновленное вручную) может однажды стать несовместимым с новым hg (autoupdated). –
Похоже, что Mercurial не предназначен для использования в скриптах столько, сколько git, не так ли? –
Ваша забота о изменениях строк имеет смысл, но не работает в другом регионе, я не думаю, что это будет проблемой. Мэтт Маккал, автор mercurial, рассматривает часть вывода текста в API, и никакие изменения не могут изменить ее, если имеется какая-либо другая опция. Вы не увидите изменения формата. –