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.
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().
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
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
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);
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...
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:
-
sed
sustituye aRevNumber
en el .dox con la salida desvnversion
(ejecutado en la carpeta principal de su repositorio) y guarda el archivo modificado enYourFileDummy.dox
-
doxygen
se ejecuta enYourFileDummy.dox
para generar la documentación - Su documentación ahora contendrá la revisión número!
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