2010-02-05 37 views

Respuesta

10

En mercurial 1.4 y posteriores puede utilizar el comando resumen, lo que da salida como esta cuando existen cambios:

$ hg summary 
parent: 0:ad218537bdef tip 
commited 
branch: default 
commit: 1 modified 
update: (current) 

y este post-comprometen:

$ hg summary 
parent: 1:ef93d692f646 tip 
sfsdf 
branch: default 
commit: (clean) 
update: (current) 

Alternativamente, se puede instalar el prompt extension y hacer algo como esto:

$ hg prompt '{status}' 

el cual emitirá una ! o ? o nada según el caso.

Ambos, por supuesto, son solo salidas de texto alternativas. No pude encontrar nada que utilizara el código de salida directamente, pero ¿desde $? verifica el último comando en una tubería que podrías hacer?

hg summary | grep -q 'commit: (clean)' 

que fijará $? no nulo si los cambios son comprometidos:

$ hg summary | grep -q 'commit: (clean)' ; echo $? 
0 
$ echo more >> that 
$ hg summary | grep -q 'commit: (clean)' ; echo $? 
1 
+0

Gracias por su respuesta. Terminé con (en zsh) '[[" nada cambió "=' 'hg ci -m tick'']] || hg push'. Y no me gusta porque en una versión futura de mercurial la redacción exacta podría cambiar (eso también se aplica a su solución de resumen de hg).Sí, 'hg prompt '{status}'' debería funcionar bien, excepto que preferiría utilizar la funcionalidad core hg porque la secuencia de comandos se ejecutará en un hosting externo, por lo que mi extensión personalizada (actualizada manualmente) algún día podría volverse incompartible con la nueva hg (versión actualizada). –

+1

Parece que mercurial no está diseñado para ser usado en guiones tanto como git, ¿o sí? –

+2

Sus preocupaciones sobre los cambios de cadenas de caracteres tienen sentido, pero, salvo que se ejecute en una configuración regional diferente, no creo que sea un problema. Matt Mackal, autor de mercurial, considera que la salida de texto forma parte de la API y no se permite modificarla si hay alguna otra opción disponible. No verá ese cambio de formato. –

0

Debe haber algo más elegante que simplemente

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

Puede también ejecutar hg id. Si el hash termina con un +, indica que la copia de trabajo tiene cambios. Esto incluso debería funcionar con versiones antiguas de hg.

Parece que ya está usando zsh; Bueno, hace un par de días ayudé a actualizar el soporte de Mercurial para el VCS_INFO incorporado para poner información de VCS en su mensaje. Programado para la próxima versión es compatible para mostrar los cambios en el directorio de trabajo (entre otras cosas). Si no quiere esperar, puede grab the necessary files from CVS.

En el momento en que mi pronta incluye esta (usando solamente funcionalidad integrada zsh):

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

¡Gracias! Suena como un truco, pero de hecho parece estar funcionando :) Hmm. Ha pasado un tiempo desde la última vez que he visto CVS en uso;) –

+0

Esto no funciona si agregó un nuevo archivo que no se agregó al repositorio – etalon11

2

que utilizo:

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

Si no hay cambios con archivos sobre orugas, a continuación, la salida del comando es una cadena vacía

+0

¡Funciona bien! Agregué el parámetro "-u" para rastrear archivos desconocidos que también pertenecen a cambios no confirmados. – etalon11

2

Yo uso esta fiesta-fragmento desde hace algún tiempo:

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

Esto se activa con la presencia de archivos no registrados, que pueden no ser los que usted desea. – xixixao

1

Tanto id y summary son más lentos que status, por lo que esta es la manera más rápida actualmente lo sé, haciendo caso omiso de los archivos sin seguimiento:

[[ -z `hg status | grep -v '^?'` ]] && echo no-changes || echo has-changes 
Cuestiones relacionadas