tagger tag windows svn tortoisesvn svn-hooks pre-commit

windows - tagger - tag folders



Gancho de precompilación de Windows para la duración del comentario Subversion (5)

Parece que no estoy llegando a ninguna parte con esto. Ya sea buscando en la web un script, etc. Cualquier persona tiene un script que puede editar el pre-commit.tmpl original en un entorno de Windows que requiere x caracteres ingresados ​​para un comentario sobre commit en Tortoise Subversion globalmente para que todos los miembros del equipo sean necesarios, mientras que este requisito se transfiere a los clientes del servidor SVN.

No conozco el lenguaje de scripting y esto debería ser algo bastante simple sin que me tome el tiempo de descifrar el scripting para las próximas 3 horas.


En Windows, puede usar el VisualSVNServerHooks.exe check-logmessage pre-commit de VisualSVNServerHooks.exe check-logmessage que viene con el servidor VisualSVN y está ubicado en el %VISUALSVN_SERVER%bin . Esta sencilla herramienta lo ayudará a definir el número mínimo permitido de caracteres en el mensaje de registro.

Consulte el artículo KB140: validación de mensajes de registro de compromiso en el Servidor VisualSVN para obtener instrucciones.


Este es un archivo .bat para requerir que haya un comentario. Comprueba la existencia de al menos un personaje en el comentario.

@echo off :: Stops commits that have empty log messages. @echo off setlocal rem Subversion sends through the path to the repository and transaction id set REPOS=%1 set TXN=%2 svnlook log %REPOS% -t %TXN% | findstr . > nul if %errorlevel% gtr 0 (goto err) else exit 0 :err echo. 1>&2 echo Your commit has been blocked because you didn''t enter a comment. 1>&2 echo Write a log message describing the changes made and try again. 1>&2 echo Thanks 1>&2 exit 1

Este archivo se encuentra en la carpeta / hooks del repositorio, llamado pre-commit.bat. Si necesita una cantidad mínima de caracteres, la línea para modificar es

svnlook log %REPOS% -t %TXN% | findstr . > nul

Entonces, si quieres un mínimo de 10 caracteres, debes tener 10.''S en lugar de solo uno

svnlook log %REPOS% -t %TXN% | findstr .......... > nul

Las opciones más avanzadas para el comando findstr le permitirán realizar comprobaciones más elegantes (ciertos conjuntos de caracteres, etc.)


Prueba esto :

rem Make sure that the log message contains some text. set REPOS=%1 set TXN=%2 "C:/Program Files/Subversion/bin/SVNlook.exe" log -t %TXN% %REPOS% | FindStr [a-zA-Z0-9] IF %ERRORLEVEL% EQU 0 GOTO OK echo Your commit has been blocked because you didn''t provide a log message 1>&2 echo Please write a log message describing the purpose of your changes and 1>&2 echo then try committing again. -- Thank you 1>&2 exit 1 :OK rem ------------------------------------------------------------- rem Check if comment is in list of reserved words to not be used.. rem ------------------------------------------------------------- "C:/Program Files/Subversion/bin/SVNlook.exe" log -t %TXN% %REPOS% >comment setlocal enabledelayedexpansion Set SEPARATOR= set COMMENT= for /f "delims=" %%a in (comment) do ( set currentline=%%a set COMMENT=!COMMENT!%SEPARATOR%!currentline! ) FIND "%COMMENT%" "C:/Program Files/Subversion/excludedwords.txt">Null If %ERRORLEVEL% EQU 1 goto OK2 :Fail echo Your commit has been blocked because the single word comment you provided is not allowed 1>&2 echo Line is -%COMMENT%- 1>&2 echo Please write a proper log message describing the purpose of your changes and 1>&2 echo then try committing again. -- Thank you 1>&2 exit 1 :OK2 rem ------------------------------------------------------------- rem Check number of words on the line if = 2 then reject comment rem ------------------------------------------------------------- Set VAR1=%COMMENT% Set count=0 For %%j in (%VAR1%) Do Set /A count+=1 IF %count% EQU 2 goto Fail2 goto OK3 :Fail2 echo Your commit has been blocked because not enough detail supplied 1>&2 echo Please write a longer log message describing the purpose of your changes and 1>&2 echo then try committing again. -- Thank you 1>&2 exit 1 :OK3 rem ------------------------------------------------------------- rem Check that the author of this commit has the rights to perform rem ------------------------------------------------------------- rem the commit on the files and directories being modified. rem commit-access-control.pl "$REPOS" "$TXN" commit-access-control.cfg || exit 1 rem All checks passed, so allow the commit. exit 0


Tengo un gancho precompromiso que puede hacer exactamente lo que quieres. Además de mucho más.

  • Puede especificar una longitud mínima de comentario de compromiso.
  • Puede hacer coincidir el comentario de compromiso con una expresión regular . No solo puede especificar una longitud, sino que también puede especificar ciertos parámetros. Por ejemplo, ¿el comentario de compromiso contiene un número de error que utiliza su sistema de seguimiento de defectos, por lo que puede rastrear el cambio a un defecto en particular?

También le permite hacer lo siguiente:

  • Establezca varios permisos de confirmación contra archivos o directorios particulares:
    • lectura-escritura : el usuario puede finalizar y comprometer estos elementos.
    • de solo lectura : el usuario puede realizar el pago de este artículo, pero no puede confirmar los cambios.
    • add-only : el usuario puede agregar un directorio a través de svn cp , pero no cometer ningún cambio. Esto es perfecto para el directorio /tags donde se le permite hacer una etiqueta, pero no modificar la etiqueta.
    • no-delete : los usuarios pueden confirmar cambios y agregar nuevos archivos, pero no eliminarlos.
    • no-add : los usuarios solo pueden confirmar cambios y no agregar ni eliminar archivos en una confirmación.

Y, también te permite hacer esto:

  • Prohibir ciertos nombres de archivo a través de expresiones regulares de globbing ,
  • Requerir que ciertos archivos o directorios tengan una propiedad particular establecida en un valor particular. Muy útil para cosas como asegurarse de que las secuencias de comandos de shell, Unix Makefiles y Windows Batch tengan la terminación de línea correcta, o svn:ignore , para que los usuarios no se comprometan accidentalmente en archivos que no deberían comprometer.
  • Requiere que ciertas propiedades de las revisiones se establezcan con ciertos valores. Así es como compruebas los mensajes de confirmación, pero diciendo que svn:log debe coincidir con ciertas expresiones regulares.

Este script de precompromiso está escrito en Perl. Por defecto, Perl viene con servidores Unix, Mac y Linux. Lamentablemente, no está incluido en las computadoras con Windows. Afortunadamente, hay varios paquetes Perl de fuente abierta, gratuitos y fáciles de instalar para PC, como ActivePerl y Strawberry Perl.


Uso SubversionNotify , probablemente hace más de lo que necesita, pero es bastante fácil de configurar.