2009-06-12 4 views
8

Me interesaría saber cómo usted maneja el que supera el número de versión para el nuevo número de versión.Bumping números de versión para nuevas versiones en archivos asociados (documentación)

¿Cómo se maneja el número de versión en los archivos asociados, como páginas de manual, etc.

El software es construir con la cadena de herramientas GNU autoconf modo, automake, etc están disponibles y se utilizan para el número de versión de la aplicación . Entonces esa información puede ser reutilizada.

git se utiliza como un vcs.

Una posibilidad sería introducir un objetivo adicional, nuevo en Makefile.am que hace un sed/awk para reemplazar el número de versión y las fechas en todos los archivos asociados. Ese objetivo podría llamarse una vez al comienzo (inmediatamente después de la bifurcación) del desarrollo de una nueva versión.

Luego, el proyecto podría compilarse con la información correcta cuando las personas hicieran un git clone del proyecto o cuando se realice un lanzamiento de tarball. Por supuesto, uno debe recordar ejecutar este objetivo cuando inicie el desarrollo de una nueva versión.

Otra opción sería hacer el reemplazo de sed/awk con un gancho para el destino dist. Pero esto pondría el repositorio de git del proyecto en un estado donde no hay un número de versión correcto asociado con los archivos asociados.

Prefiero hacer la primera solución, ya que también registra número correcto de la versión dentro del historial de git.

Cuando se realiza una sustitución sed/awk ¿Prefiere hacerlo "in-file" o con una plantilla de archivo liek la autoconf/automake herramientas hacen. Veo ventajas y desventajas en ambos métodos.

¿Cómo se maneja versionando de los archivos asociados. ¿Cambia ellos al comienzo de la fase de desarrollo, se cambia cuando justo antes de enviar , haces de reemplazo archivoentrada o prefiere el uso de una plantilla?

THX.

+0

Esto es realmente 2 preguntas, podrías separarlas más claramente. –

Respuesta

6

creo que la manera estándar de hacer esto es utilizar el sistema y el gancho de Git m4 o sed/awk para hacer la búsqueda/reemplazo como sugieres. Sólo se necesita una ficha especial en una observación en cada archivo (probablemente en la cabecera).

Aquí está la referencia sobre githooks y aquí hay un par de páginas escritas por gente que resuelve el mismo problema:

Ambos se basan en almacenar el número de versión en una archivo en algún lugar de su árbol fuente.

también me encontré con un llamado tomó 0release que pretende automatizar la creación de liberación (y el establecimiento de números de versión).

Por último, en relación con los números de liberación, esto se trata en varias otras preguntas:

+0

He visto otras preguntas. Y mi pregunta no es tanto sobre el esquema para usar como más sobre la solución técnica para obtener el número de versión en los archivos asociados de la aplicación que obtiene el número de versión de configure.ac, que es el lugar donde está el número de versión en la fuente árbol. THX para la pista con githook. Eso eliminaría la ejecución manual del archivo MAKE y tener un objetivo adicional en Makefile.am. También echaré un vistazo a 0release. –

1

utilizamos el clásico mayor .minor.patch system, que se aplica para lanzar candidatos como una 'etiqueta', tenemos una secuencia de comandos que etiqueta una confirmación como el número de versión, en lugar de usar un 'objeto de etiqueta'. Toda la numeración de la versión se hace 'a mano'. Funciona razonablemente bien, porque el número de versión se crea mediante las secuencias de comandos 'liberar en etapas', que es mucho más tarde en el proceso de desarrollo. No nos molestamos en usar ninguno de los ganchos de git, porque realmente no necesitamos hacerlo, si un compromiso no abandona el entorno de desarrollo, entonces no necesita un ID que no sea el código SHA interno.

Intentamos hacer cumplir que cada versión de 'parche' debe ser compatible con otras versiones con la misma etiqueta mayor y menor.

De esta forma, todo lo que tenga una etiqueta debería al menos compilarse, pero es posible o bastante probable que no funcione según las especificaciones.

Un refinamiento sería lograr que el departamento de control de calidad cree un objeto de etiqueta firmado en todo lo que sea 'QA aprobado', pero por ahora confiamos en otros documentos para eso.

9

Actualmente, una solución común es invocar AC_INIT con un argumento m4_esyscmd para generar la VERSIÓN desde git. Por ejemplo, configure.ac de autoconf contiene las líneas:

 
AC_INIT([GNU Autoconf], 
     m4_esyscmd([build-aux/git-version-gen .tarball-version]), 
     [[email protected]]) 

donde la acumulación de aux/git-versión-gen es un simple script que llama 'git describir' para generar el número de versión. (ver gnulib)

Existen inconvenientes en este enfoque, pero puede ser efectivo.

+0

¿Qué inconvenientes podrías pensar, William? –

+1

El principal inconveniente es el gasto que implica el reemplazo del número de versión. Para propagar el cambio al código, debe volver a ejecutar la cadena de autotool, lo que desencadenará una recompilación de todos los archivos fuente que incluyen config.h, por lo que básicamente significa reconstruir todo el proyecto. Dado que la versión proviene del repositorio git, eso significa que cada compromiso fuerza una reconstrucción. El modelo actual utilizado en autoconf funciona alrededor de eso al propagar el cambio solo en 'make dist' o 'make distcheck' a través de algunas reglas en el GNUmakefile. Las soluciones se están discutiendo en las listas de autotools. –

Cuestiones relacionadas