2010-02-05 4 views

ответ

10

В ртутный 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 
+0

Спасибо за ваш ответ. Я закончил с (в zsh) '[[" ничего не изменилось "=' 'hg ci -m tick'']] || hg push'. И мне это не нравится, потому что в какой-то будущей версии Mercurial может измениться точная формулировка (что также относится к вашему сводному решению hg).Да, 'hg prompt '{status}'' должен работать нормально, за исключением того, что я предпочел бы использовать функциональность ядра hg, потому что скрипт будет работать на внешнем хостинге, поэтому мое пользовательское расширение (таким образом обновленное вручную) может однажды стать несовместимым с новым hg (autoupdated). –

+1

Похоже, что Mercurial не предназначен для использования в скриптах столько, сколько git, не так ли? –

+2

Ваша забота о изменениях строк имеет смысл, но не работает в другом регионе, я не думаю, что это будет проблемой. Мэтт Маккал, автор mercurial, рассматривает часть вывода текста в API, и никакие изменения не могут изменить ее, если имеется какая-либо другая опция. Вы не увидите изменения формата. –

0

Там должно быть что-то более изящное, чем просто

[ `hg st |wc -l` -eq 0 ] && echo hi 
4

Вы можете также запустить hg id. Если хэш заканчивается +, это означает, что рабочая копия имеет изменения. Это должно работать даже со старыми версиями hg.

Звучит так, будто вы уже используете zsh; хорошо, пару дней назад я помог обновить поддержку Mercurial для встроенного VCS_INFO для размещения информации VCS в вашем приглашении. Слан для следующего выпуска - поддержка для отображения изменений в рабочем каталоге (между прочим). Если вы не хотите ждать, вы можете grab the necessary files from CVS.

На данный момент моя подсказка включает это (используя только встроенные функции ЗШ):

(hg)[1801+ branchname somemq.patch, anycurrentbookmarks] 
+0

Спасибо! Это звучит как хак, но на самом деле, похоже, работает :) Хм. Прошло некоторое время с тех пор, как я последний раз видел CVS в использовании;) –

+0

Это не работает, если вы добавили новый файл, который не был добавлен в репозиторий. – etalon11

2

Я использую:

hg status -m -a -r -d -u 

Если никаких изменений с отслеживаемых файлов, то вывод команды не пустую строку.

+0

Работает хорошо! Я добавил параметр «-u» для отслеживания неизвестных файлов, которые также относятся к незафиксированным изменениям. – etalon11

2

Я использую этот Баш-фрагмент кода в течение некоторого времени:

if [[ $(hg status 2>/dev/null) ]] 
then 
    # do something 
fi 
+0

Это вызвано также отсутствующими файлами, которые могут быть не такими, какие вы хотите. – xixixao

1

Оба id и summary медленнее, чем status, так что это самый быстрый способ, которым я в настоящее время известно, игнорируя неотслеживаемые файлы:

[[ -z `hg status | grep -v '^?'` ]] && echo no-changes || echo has-changes 
Смежные вопросы