2011-06-27 9 views
6

¿Es posible etiquetar el repositorio padre principal y agregar la etiqueta a todos los sub-repositorios también?Etiquetar recursivamente todos los Sub-Repositorios usando Mercurial

Sin esto, si alguna vez tuviera que eliminar un proyecto como un sub-repositorio y acceder a él por sí solo, se habría perdido toda la información de las etiquetas, ya que esto solo pertenece al repositorio padre.

Respuesta

2

Probablemente sea posible, pero un poco complicado. Tendrías que escribir básicamente tu propia utilidad tag (tal vez como una extensión de Mercurial) para ayudarte a reunir la información adicional necesaria y hacer llamadas adicionales al hg tag. Sin embargo, no sé mucho sobre la API al escribir una extensión, por lo que cualquier idea que ofrezca se basará en llamar al hg directamente con los comandos.

De forma predeterminada, cuando confirma en el repositorio principal, los subrepositorios se confirman primero. Luego toma el nuevo ID de conjunto de cambios para cada subrepo y los pone en el archivo .hgsubstate en un formato como este:

77ba00000fe8e9ca033d97dc07b85a50dd106837 nested 

El etiquetado recursiva tendría que obtener el contenido del archivo .hgsubstate como lo fue en el conjunto de cambios que están etiquetando en el repositorio principal. Puede pensar en hg revert, pero sería una mala idea, ya que podría estropear fácilmente su directorio de trabajo (hg no le gusta hacerlo en .hgsubstate de todos modos). Su mejor apuesta para eso es hacer hg export para esa revisión y analizar el diff resultante para las líneas + en el archivo .hgsubstate.

A continuación, tomaría el id de changset y el nombre de subrepo de cada uno de ellos para llamar al hg -R <subrepopath> tag -r <id> <tag>. Y, por supuesto, finalmente etiquetar el repositorio principal.

Todavía hay problemas potenciales con esto, cosas que deberá tener en cuenta o descubrir cómo vivir. Por ejemplo: ¿Qué sucede si se ha comprometido en el repositorio principal pero no en 1 o más subrepos? Ahora tiene más de un conjunto de cambios en el repositorio principal donde .hgsubstate enumera el mismo id de conjunto de cambios en el subrepo. Entonces, si etiqueta ambos en el repositorio principal, el conjunto de cambios en el subrepo tendrá 2 etiquetas.

Estoy usando TortoisHg 2.0.5 w/Mercurial 1.8.4. Etiquetar subrepositorios por su cuenta no genera ninguna necesidad de comprometer en el repositorio principal, en su mayoría debería funcionar bien.

Cuestiones relacionadas