Gancho de Pre-commit de Windows para Subversion de longitud de comentario


Parece que no llego a ninguna parte con esto. Ya sea buscando un script en la web, etc. Cualquiera tiene un script que puede editar el pre-commit listo para usar.tmpl en un entorno Windows que requiere que se introduzcan x caracteres para un comentario en la confirmación en Tortoise Subversion globalmente para que todos los miembros del equipo sean requeridos, mientras que este requisito se envía a los clientes desde el servidor SVN?

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

Author: bahrep, 2009-05-15

5 answers

Esto es a .archivo bat para requerir hay un comentario. Comprueba la existencia de al menos un carácter 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, llamada pre-commit.bate. Si necesita una cantidad mínima de caracteres, la línea a modificar es

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

Así que si quieres un mínimo de 10 caracteres, necesitas tener 10.'s en lugar de solo uno

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

Más las opciones avanzadas para el comando findstr le permitirán hacer más elegante controles (ciertos juegos de caracteres, ect)

 55
Author: Corey Downie,
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
2009-05-15 16:14:34

Utilizo SubversionNotify, probablemente hace más de lo que necesita, pero es bastante simple de configurar.

 2
Author: Slipfish,
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
2009-05-15 15:43:18

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  
 2
Author: Nick,
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
2011-09-05 12:20:05

Tengo un gancho pre-commit que puede hacer exactamente lo que quieras. Y mucho más.

  • Puede especificar una longitud mínima del comentario de confirmación.
  • Puede hacer coincidir el comentario de confirmación 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 confirmación contiene un número de error que utiliza su sistema de seguimiento de defectos, para que pueda rastrear el cambio a un defecto?

También le permite hacer lo siguiente:

  • Establecer varios permisos de confirmación en archivos o directorios particulares:
    • lectura-escritura: El usuario puede verificar y confirmar estos elementos.
    • de solo lectura: El usuario puede realizar la compra de este elemento, pero no puede confirmar los cambios.
    • add-only: El usuario puede agregar un directorio a través de svn cp, pero no confirmar 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 eliminar estos archivos.
    • no-add: Los usuarios solo pueden confirmar cambios, y no agregar o eliminar archivos en una confirmación.

Y, también le permite hacer esto:

  • Prohibir ciertos nombres de archivo a través de expresiones regulares de globbing ,
  • Requiere que ciertos archivos o directorios tengan una propiedad particular establecida a un valor particular. Muy útil para cosas como asegurarse de que los scripts de shell de Unix, los Makefiles de Unix y los archivos por lotes de Windows tengan el final de línea correcto, o que svn:ignore esté configurado, para que los usuarios no confirmen accidentalmente archivos que no deberían confirmar.
  • Requiere que ciertas propiedades de revisiones se establezcan con ciertos valores. Así es como comprueba los mensajes de confirmación, pero diciendo que svn:log debe coincidir con ciertas expresiones regulares.

Este script pre-commit está escrito en Perl. Por defecto, Perl viene con Unix, Mac y Linux servidor. Desafortunadamente, no está incluido en las computadoras con Windows. Afortunadamente, hay varios paquetes Perl de código abierto, gratuitos y fáciles de instalar para PC, como ActivePerl y Strawberry Perl

 1
Author: David W.,
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
2015-07-07 05:49:37

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

Consulte el artículo KB140: Validando los mensajes de registro de confirmación en el servidor VisualSVN para obtener instrucciones.

 0
Author: bahrep,
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
2018-09-13 15:56:18