Obtener el número de repositorio de subversion en código


Me gustaría implementar una forma de grabar la versión de un proyecto dentro del código, para que pueda usarse al probar y para ayudar a rastrear errores. Parece que el mejor número de versión a usar sería el número de revisión actual de Subversion. ¿Hay una manera fácil de enganchar este número en un (C++ en mi caso) archivo de cabecera o algo, que luego puedo obtener en el código? Supongo que esto es un gancho post commit o algo así?

¿Alguien tiene alguna experiencia de implementar esto (con código para compartir, por favor?), o puede sugerir una mejor alternativa? Gracias.

Author: Community, 2008-08-19

6 answers

Aunque ingenioso, el truco de la palabra clave de revisión solo actualiza el archivo cuando se cambia en esa revisión; si no cambia el archivo, continuará reflejando la revisión anterior.

Si desea que el software refleje siempre el número de revisión general, entonces tendrá que profundizar en el archivo de entradas SVN relevante y extraerlo, lo cual no es demasiado difícil (es un archivo XML).

Wikipedia hace esto en su página de versión para indicar la revisión de la software que se está ejecutando en vivo; el código está aquí - busque el método getSvnRevision().

 14
Author: Rob,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-30 04:23:00

De dos maneras:

Embed Id Id { o Revision Revision { dentro del código. Luego establezca la propiedad svn:keywords="Id Revision" en el archivo. Esto le dará la última revisión modificada de ese archivo fuente. Bueno para proyectos más pequeños y scripts.

Alternativamente, use un proceso impulsado por Makefile y la herramienta de línea de comandos svnversion. (Lenguaje específico-esto debería funcionar para C / C++)

echo -n "#define VERSION 1.0.1-" > version.h
svnversion -n . >> version.h

O algún script de construcción más complejo con sed y version.h.in. Entonces sólo # incluir versión.h

Que le dará el número de versión del repositorio, que cambiará con cada confirmación / actualización, y es probablemente un número de versión más apropiado para la mayoría de los proyectos.

Nota: También utilicé una cadena de versión legible por humanos que actualizo manualmente. El ejemplo daría: Versión: 1.0.1-r13445

~J

 27
Author: jmanning2k,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-19 14:39:59

También puede usar SubWCRev que es parte de TortoiseSVN.

SubWCRev es un programa de consola de Windows que se puede usar para leer el estado de una copia de trabajo de Subversion y opcionalmente realizar la sustitución de palabras clave en un archivo de plantilla. Esto se usa a menudo como parte del proceso de compilación como un medio para incorporar información de copia de trabajo en el objeto que está construyendo. Por lo general, se puede utilizar para incluir el número de revisión en un " Acerca de" cuadro.

Http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-subwcrev.html

 13
Author: Bill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-10-09 10:16:43

En su Makefile, agregue:

SVNDEV := -D'SVN_REV="$(shell svnversion -n .)"'
CFLAGS := $(SVNDEV) ...

Entonces puedes usar macro SVN_REV en cualquier lugar de tu código, por ejemplo:

printf ("Version: SVN %s\n", SVN_REV);
 6
Author: iCoder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-11 00:51:21

Puede usar la propiedad svn:keywords para habilitar la palabra clave Rev.

Luego puede usar $Rev$ en su código y SVN lo expandirá automáticamente al actualizar a $Rev: 256 $ que luego puede analizar...

Más información sobre el manual de Subversion

 4
Author: Vincent Robert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-19 14:26:10

Una buena solución actualizada:

Cree un Makefile que contenga la siguiente línea (en la misma carpeta que YourFile.dox):

sed "s~RevNumber~$(shell svnversion ../)~g" YourFile.dox > YourFileDummy.dox; doxygen YourFileDummy.dox

Y YourFile.dox debe contener esto:

...
PROJECT_NUMBER         = "Revision RevNumber"
...

Ahora:

  1. sed sustituye a RevNumber en el .dox con la salida de svnversion (ejecutado en la carpeta principal de su repositorio) y guarda el archivo modificado en YourFileDummy.dox
  2. doxygen se ejecuta en YourFileDummy.dox para generar la documentación
  3. Su documentación ahora contendrá la revisión número!
 0
Author: Jesse,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-18 09:26:41