2010-05-10 17 views
8

Recientemente comencé a usar mercurial para el control de versiones en un proyecto Java. Cuando ejecuto mi programa, los parámetros de entrada que ha utilizado para producir cierta salida, se escriben en un archivo específico. Sería bueno si pudiera agregar el número actual de cambios mercuriales (que indica la versión de mi programa) a ese archivo de salida también.Java: cómo obtener el número actual de conjuntos de cambios mercuriales para usar en el programa

¿Cuál sería la forma más sencilla de hacerlo en Windows? Podría escribir un analizador de Java simple para obtener el resultado de la primera línea del comando hg log -l 1, pero quizás haya una manera más fácil (es decir, menos líneas de código).

Respuesta

10

Puede usar más bien hg identify.

debe estar durante el paso de empaquetado, cuando las fuentes se han confirmado y genera la versión empaquetada (jar) de su aplicación.
Durante ese paso, puede generar un archivo version.txt con ese tipo de información.

$ MY_VERSION=$(hg id) 
$ echo $MY_VERSION 
53efa13dec6f+ tip 

(véase, por ejemplo "build identification" for Python)

+2

que arrastra signo más significa VonC tiene, cambios no locales, que puede ser agradable tener en cuenta también. –

+0

Hablando de eso, ¿cómo va la migración? – Santa

+0

te refieres a hg identify; y un inconveniente es que muestra el corto hash legible en humanos en lugar de los 40 caracteres completos sha1 –

2

Esta es la opinión de los desarrolladores Mercurial: Keyword Substitution - Why You Don't Need It

+0

Hmm, no entiendo el punto. ¿Qué se entiende por expansión de palabras clave? Lo único que se me ocurre es, por ejemplo, que puede escribir 'hg id' en lugar de 'hg identity', pero ese concepto no parece aplicarse aquí. – Rabarberski

+3

Otros VCS le permiten agregar palabras clave especiales como $ Id $, $ Rev $, $ Author $ que se expanden cuando se retira el archivo. Esto le permitió escribir cosas como const char * version = "$ Rev $"; que se convertiría en algo así como const char * version = "$ Rev: 1.2 $" cuando se desprotegió el archivo. –

7

Ya que estás en un proyecto Java, esto podría ser relevante para usted. Utilizo este objetivo Ant para mostrar la información de la versión (id del conjunto de cambios de Mercurial) en la lista de aplicaciones en la página Tomcat Manager. Simplemente coloque el ID del conjunto de cambios dentro del elemento display-name xml en mi web.xml.

<target name="build.release"> 
    <exec executable="/usr/local/bin/hg" outputproperty="scm.version.tag.id"> 
     <arg value="id"/> 
     <arg value="-i"/> 
    </exec> 
    <filter token="build.version.tag" value="${scm.version.tag.id}" /> 
    <copy file="${web.home}/WEB-INF/web.xml" todir="${build.home}" filtering="true" /> 
</target> 

Dentro del web.xml, hay una ficha en el elemento XML display-name, así:

<display-name>My Webapp @[email protected]</display-name> 
2

Mercurial tiene una extensión de expansión de palabras clave. Consulte KeywordExtension para obtener instrucciones y advertencias.

+0

Eso es bastante agradable. Supongo que cada archivo obtiene información de la confirmación más reciente que realmente cambió el archivo individual.(y sí, I * DO * necesito expansión de palabras clave, si quiero rastrear lo que otras personas están haciendo inadvertidamente (cambios totalmente fuera del control de revisión, por desgracia). Solo cuando se está siguiendo correctamente su sistema de lanzamiento, la necesidad de un suplemento la información como las palabras clave se va. – Roboprog

+0

Esto está mapeado como "característica de último recurso" y no debería usarse – RS1980

2

hg branch | xargs hg log -l1 --template {rev} -b

Esto le dará el número de revisión para la rama actual en la que está trabajando, muy importante para las construcciones de diferentes ramas.

En un archivo de hormigas esto es lo que necesita ...

<exec dir="${basedir}" 
     executable="/usr/local/bin/hg" 
     outputproperty="branch"> 

      <arg value="branch"/> 
    </exec> 

    <exec dir="${basedir}" 
      executable="/usr/local/bin/hg" 
      outputproperty="version"> 

      <arg value="log"/> 
      <arg line="-l1 --template {rev} -b${branch}" /> 
    </exec> 
Cuestiones relacionadas