2012-01-02 5 views
6

Usamos hg para controlar las fuentes de un proyecto grande. Cada vez que hacemos un lanzamiento, etiquetamos la versión en hg.Hg - Encuentra etiquetas que "cubren" la versión del archivo específico

Ahora digo que tomo una revisión específica (donde he solucionado un error, por ejemplo). Deseo saber qué versiones contienen esta corrección, es decir, qué etiquetas "cubren" esta revisión.

¿Cómo puedo encontrar esto? En las etiquetas hg, parece referirse solo al conjunto de cambios etiquetados. Recuerdo que en ClearCase todos los ancestros de la revisión etiquetada también se marcarían, ¿hay alguna manera de ver esta información en hg?

Gracias!

+0

El tejón perezosa ha puesto el dedo en la cabeza, pellizqué su plantilla a "{nodo} - {tags} \ n "que me da una vista rápida de todas las versiones que contienen un conjunto de cambios determinado. ¡Brillante! – YMA

Respuesta

5

Revsets sin extensiones adicionales pueden darte algo. como

hg log -r "id(hash):tip and tag()" o más corto y más bonita versión (quizás) hg log -r "descendants(hash) and tag()"

Justo y el ejemplo de revset abreviada de mi repo con fusiones después de la revisión en cuestión

>hg glog -r "descendants(c9e3b41ec78f)" 
@ changeset: 65:f202d72d6397 
| tag:   tip 
| parent:  63:c778bae76563 
| user:  Alex Bream 
| date:  Wed Nov 09 21:42:50 2011 +0600 
| summary:  2-9 яюыэюёЄ№■ фю 2769 
| 
| o changeset: 64:625d08492555 
| | branch:  Cleanup 
| | parent:  62:eed6619dadb8 
| | user:  Alex Bream 
| | date:  Wed Nov 09 21:38:44 2011 +0600 
| | summary:  ╟рўшёЄър яю 1-1 155 
| | 
o | changeset: 63:c778bae76563 
|\| parent:  61:e7ae9e5f725a 
| | parent:  62:eed6619dadb8 
| | user:  Alex Bream 
| | date:  Wed Nov 09 21:33:22 2011 +0600 
| | summary:  Merge with Cleanup 
| | 
| o changeset: 62:eed6619dadb8 
| | branch:  Cleanup 
| | parent:  59:c9e3b41ec78f 
| | user:  Alex Bream 
| | date:  Thu Mar 03 19:19:34 2011 +0500 
| | summary:  ╟рўшёЄър яю 1-1 131 
| | 
o | changeset: 61:e7ae9e5f725a 
| | user:  Alex Bream 
| | date:  Thu Mar 03 05:40:34 2011 +0500 
| | summary:  2-9 яю 2745 
| | 
o | changeset: 60:1393fe759096 
|\| parent:  57:a38258cac9b8 
| | parent:  59:c9e3b41ec78f 
| | user:  Alexander 
| | date:  Thu Mar 03 04:59:22 2011 +0500 
| | summary:  Merge ё ўшёЄшыъющ 
| | 
| o changeset: 59:c9e3b41ec78f 
| | branch:  Cleanup 
| | user:  Alexander 
| | date:  Thu Mar 03 04:54:11 2011 +0500 
| | summary:  ╟рўшёЄър яЁюыюу яюыэюёЄ№■ 
| | 

y comparando la salida de dos formas de revsets (misma salida de todos modos)

descendientes()

>hg log -r "descendants(c9e3b41ec78f)" --template "{rev}:{node|short}\n" 
59:c9e3b41ec78f 
60:1393fe759096 
61:e7ae9e5f725a 
62:eed6619dadb8 
63:c778bae76563 
64:625d08492555 
65:f202d72d6397 

gama directa definición

>hg log -r "id(c9e3b41ec78f):tip" --template "{rev}:{node|short}\n" 
59:c9e3b41ec78f 
60:1393fe759096 
61:e7ae9e5f725a 
62:eed6619dadb8 
63:c778bae76563 
64:625d08492555 
65:f202d72d6397 
+0

Supongo que esto podría funcionar, pero por lo que deduzco tendrías que tomar cada etiqueta, rastrear los descendientes y ver si su conjunto de cambios está allí? – YMA

+0

@YMA - no, como ** I ** lea su texto, debe usar el orden inverso - encuentre las etiquetas ** después de un cambio de producto ** - "... qué versiones contienen esta corrección ..." –

+0

Mi error. De hecho, esto me daría todas las etiquetas que necesito. ¡Muchas gracias! – YMA

0

Puede usar el Nearest extension para encontrar la etiqueta de reenvío más cercana a su revisión. Luego, dependiendo de su flujo de trabajo, debería poder deducir fácilmente qué otra etiqueta también contiene su cambio.

También puede utilizar el siguiente para imprimir la última etiqueta hacia atrás desde la revisión actual:

Y luego también deducir la etiqueta de "cobertura".

+1

{latesttag} muestra la etiqueta * before * changeset, OP ** pidió "all after" **. FAIL –

+0

@LazyBadger Sí, es lo que dije en mi respuesta ... Una vez que tienes la última etiqueta antes (o hacia atrás para reutilizar mi palabra), puedes deducir las demás. – krtek

+0

Buena idea, pero las etiquetas no son necesariamente lineales - nuestro gráfico de changeset se parece más a un tapiz que a una escalera :) – YMA

1

Esto da la salida similar a hg tags:

hg log -r "reverse(descendants(8bb6)) and tag()" --template "{tags}\t{rev}:{node|short}\n" 
Cuestiones relacionadas