Estoy de acuerdo con los comentarios sobre $ Revisión $ no siendo la herramienta adecuada para el trabajo. Usando una herramienta para extraer el número de revisión de la salida de svninformación es de hecho lo correcto.Sin embargo
hay dos cosas a tener en cuenta:
SVNinformación sólo devolverá la información correcta si SVNactualización se ha ejecutado en el directorio con las fuentes controladas a cabo . Si usa pasos de compilación personalizados, probablemente también deba agregar un comando.
SVNinformación le da también información sobre la ruta del repositorio. Esta es la única forma de diferenciar entre fuentes en troncal y en otro lugar, como en etiquetas. Si desea que su cuadro Acerca de contenga una cadena para identificar correctamente las fuentes utilizadas para compilar la aplicación, asegúrese de que la ruta del repositorio esté disponible también.
Editar:
Ésta es una secuencia de comandos que deben copiarse en el directorio de nivel superior del proyecto. Actualizará las fuentes del repositorio, obtendrá el número de revisión SVN de la llamada svn info y lo comparará con la constante SVN_REVISION del archivo src \ SvnRev.inc. Si falta el archivo, lo creará; si la revisión es diferente, se sobrescribirá. Si svn no está disponible, escribirá el número de revisión 0 en el archivo.
El archivo resultante src \ SvnRev.inc se puede simplemente incluir en un archivo de origen. Se podría crear un archivo similar para incluirlo en el recurso de versión.
@echo off
setlocal
rem determine project top level directory from command file name
set PRJDIR=%~dp0
cd %PRJDIR%
set SVNREVFILE=src\SvnRev.inc
rem execute "svn info", extract "Revision: 1234" line, and take SVN rev from there
svn update
for /F " usebackq tokens=1,2 delims=: " %%i in (`svn info`) do set key=%%i&set value=%%j&call :read-svn-rev
@echo SVN revision "%SVNREV%"
rem extract "const SVN_REVISION = 1234;" line, and take header SVN rev from there
for /F " usebackq tokens=2,4 " %%i in (%SVNREVFILE%) do set name=%%i&set value=%%j&call :read-file-rev
@echo Include file revision "%FILEREV%"
rem check for valid SVN rev
if "%SVNREV%" EQU "" goto :no-svn-ref
rem do not write file if SVN ref is equal
if "%FILEREV%" EQU "%SVNREV%" goto :EOF
@echo Writing svn revision %SVNREV% to %SVNREVFILE%
@echo const SVN_REVISION = %SVNREV% ; > %SVNREVFILE%
goto :EOF
:no-svn-ref
if not exist %SVNREVFILE% goto :no-header-file
rem do not write file if SVN ref is already unset
if "%FILEREV%" EQU "0" goto :EOF
@echo Writing svn revision 0 to %SVNREVFILE%
goto :write-no-version
:no-header-file
@echo Creating %SVNREVFILE% with svn revision 0
:write-no-version
@echo const SVN_REVISION = 0 ; > %SVNREVFILE%
goto :EOF
endlocal
goto :EOF
:read-svn-rev
if "%key%" EQU "Revision" set SVNREV=%value%&
goto :EOF
:read-file-rev
if "%name%" EQU "SVN_REVISION" set FILEREV=%value%&
goto :EOF
Encontré que esto no funcionaba correctamente. Creo que la razón probablemente sea porque mi copia de trabajo siempre contiene la estructura completa de mi proyecto, incluidas las etiquetas y las ramas. Por lo tanto, el script tomará el número de revisión del último cambio globalmente, en lugar de solo la carpeta donde se ejecuta. SubWCRev.exe por otro lado funciona perfectamente con mi escenario de uso. –
@Timo: Ciertamente funciona correctamente, aunque no haga lo que espera que haga. Este script devuelve la revisión global, que es la que solicitó OP. Nunca reclamé esto para devolver la última revisión de compromiso, que es por supuesto diferente. Gracias por el voto negativo, sin embargo. – mghie
@mghie: Después de volver a leer tu respuesta, lo admito, sí, tienes razón. Nunca afirmó que devolvería la última revisión de confirmación en la copia de trabajo actual. Por lo tanto, he eliminado mi voto a la baja. Todavía no es la solución adecuada para mí, pero estoy seguro de que otros encontraron esta respuesta útil. –