2011-01-20 12 views
5

Tengo una pregunta sobre Mercurial con extensión de palabra clave: ¿es posible expandir el mensaje de confirmación con una palabra clave para que aparezca en las fuentes de referencia rápida de las fuentes?Palabra clave sustituyendo con Mercurial

Editar: esto parece funcionar:

en hgrc de recompra

Log={desc} 

Pero no se sostiene, ya que CVS contraparte supuestamente hace.

Uso de la Fuente, Lucas:

expansiones que abarcan más de una línea y expansiones incrementales, como CVS' $ Log $, no son compatibles. Un mapa de plantilla de palabras clave "Log = {desc}" se expande a la primera línea de la descripción del conjunto de cambios.

+3

Solo para señalarlo: la página wiki Mercurial Keyword Expansion desaconseja su uso y, de hecho, no es parte de mercurial, sino una extensión no admitida. Con un DVCS donde todo el pago se realiza siempre en la misma revisión (a diferencia de svn cuando puede hacer un pago parcial) no hay necesidad y hay muchas razones para no usarlo (haga que 'hg diff' sea difícil/impreciso). –

+0

@ Ry4an: haga su comentario una respuesta, lo renunciaré :) – neuro

+2

Naw, "Realmente no quiere" no es una respuesta. Es cierto, pero no es lo que está preguntando. –

Respuesta

6

Las palabras clave solo se pueden expandir en una sola línea, por lo que no se puede obtener un comportamiento similar al de CVS en el log messages keep accumulating. Esto está documentado en hg help keyword después de habilitar la extensión.

La cometer mensajes son accesibles con el {desc} template keyword en Mercurial, para que pueda agregar

[keywordmaps] 
Log = {desc} 

[keyword] 
**.c = 

que tienen $Log$ línea ampliada esto en todos los .c archivos.

Tenga en cuenta que la extensión de palabra clave ofrece una vista del mundo similar a CVS en la forma en que opera por archivo. Mercurial normalmente funciona en todo el repositorio. Si lo hace

$ hg commit -m "Fixed bug 123" foo.c # create changeset 10:84e0d0dc9ce5 
$ hg commit -m "Fixed bug 234" bar.c # create changeset 11:2e85d7f2f93e 

entonces es correcto que foo.c fue cambiado en la revisión 10 pasado, pero es un error decir que la revisión 11 contienen solamente bar.c. El archivo foo.c también forma parte de la revisión 11; es totalmente plausible que el cambio a bar.c dependa del cambio anterior a foo.c, por lo que la instantánea en la revisión 11 captura el estado de foo.c y bar.c.

Los keyword extension obras en función de cada archivo cuando se expande palabras clave: se escribirá en $Log: Fixed bug 123 $foo.c y $Log: Fixed bug 234 $ en bar.c cada vez que actualice a 2e85d7f2f93e conjunto de cambios.

Si quiere ver por qué y cuándo se tocó por última vez cada archivo, esto hará lo que quiera. Si desea conocer el estado global de su repositorio, por ejemplo, para usarlo como una cadena de versión. - entonces esto está mal. El problema es que su archivo version.h no cambiará durante largos períodos cuando se desarrolle, por lo que las palabras clave en ese archivo tampoco se modificarán.

En ese caso, realmente debería ejecutar hg id como parte de su Makefile. Puede que sea más elegante con algo como:

$ hg parents --template '{latesttag}+{latesttagdistance}-{node|short}\n' 

la que dará salida a una cadena como 2.1+117-eed1e5bba9a8. Esto significa que su versión actual (eed1e5bba9a8), es 117 commits después de la última etiqueta (2.1).Eso hace que sea fácil para los usuarios comparar las compilaciones hechas desde el mismo repositorio central y aún así puede reproducir de manera única una compilación si lo necesita.