2011-07-14 12 views
10

Actualmente estoy agregando el embalaje a algo que se mantiene en Mercurial. Actualmente la versión se define en el Makefile. Me gustaría cambiar esto para poder crear paquetes diarios o paquetes con versiones adecuadas.¿Hay un equivalente a la función de "describir" de git para Mercurial?

Git proporciona una función de "descripción" de uso que puede darle una descripción de la versión etiquetada más cercana y la revisión actual. Por ejemplo si funciono esto en el núcleo:

git describe HEAD 

GIT devuelve:

v3.0-rc7-68-g51414d4 

me dice que la revisión es posterior a la versión 3.0-RC7, con un commitish git de 51414d4

¿Hay algo similar que pueda hacer en Mercurial?

+3

Para aquellos de nosotros que no sabe git, pero conoce Mercurial, ¿podría describir lo que quiere y por qué? Aumentaría la probabilidad de que alguien pueda responder mucho. –

+0

@Lasse: hecho, gracias por señalarlo. – stsquad

+0

Estimado OP: Si tiene tiempo, mueva la marca de verificación de la respuesta anterior a la respuesta más reciente. La respuesta más nueva es mejor. – unforgettableid

Respuesta

13

Tal vez algo como esto?

hg log -r . --template '{latesttag}-{latesttagdistance}-{node|short}\n' 

Por supuesto, usted debe hacer un alias para que con AliasExtension.

Obsérvese, sin embargo, a diferencia de "git describir", este comando siempre mostrar los "nodos "cortas" |" y latesttagdistance partes, en lugar de omitir cuando latesttagdistance es 0.

+0

También probablemente sea factible con los cambios. – tonfa

+0

¿Se garantiza que este string sea un refspec válido como es verdadero con 'git describe'? – nocnokneo

4

Ésta es una emulación de cerca de git describe:

hg log -r . -T "{latesttag}{sub('^-0-.*', '', '-{latesttagdistance}-m{node|short}')}" 

La función {sub(...)} asegura que una copia de trabajo que está exactamente en la etiqueta v0.1.0 se mostrará como v0.1.0 y no v0.1.0-0-m123456789abc.

Tenga en cuenta que la m antes de que el hash es para m ercurial, similar a la forma git describe utiliza un g para g ella.

Para mayor comodidad, cree un alias añadiendo lo siguiente a su ~/.hgrc:

[alias] 
describe = log -r . -T "{latesttag}{sub('^-0-.*', '', '-{latesttagdistance}-m{node|short}')}" 

A continuación, utilice el alias simplemente escribiendo hg describe.

Si desea emular git describe --dirty, las cosas se ponen aún más desordenado - pero todavía se puede ocultar todo en un alias hg:

[alias] 
describe = ! 
    dirtymark=; 
    case " $1 " in " --dirty ") dirtymark=-dirty; ;; esac; 
    echo $($HG log -r . --template "{latesttag}-{latesttagdistance}-m")$($HG id -i) | 
     sed -r -e "s/\+\$/${dirtymark}/" -e 's/-0-m[[:xdigit:]]+//' 

Ahora corriendo hg describe --dirty producirá cadenas como:

  1. v0.1.0
  2. v0.1.0-dirty
  3. v0.1.0-1-mf6caaa650816
  4. v0.1.0-1-mf6caaa650816-dirty

La omisión de la opción --dirty significa que nunca obtendrá un sufijo como -dirty (2) y (4), incluso cuando la copia de trabajo contiene cambios no confirmados.

Cuestiones relacionadas