2009-05-15 13 views
32

Parece que no estoy llegando a nada 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.Gancho precompilación de Windows para longitud de comentario Subversion

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

Respuesta

54

Este es un archivo .bat para solicitar que se realice 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 a modificar es

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

Así que si quería un mínimo de 10 caracteres, es necesario tener 10. Es más que sólo una

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

Más advanced options for the findstr comando le permitirá hacer comprobaciones más elegantes (ciertos conjuntos de caracteres, etc.)

+0

Lo he visto pero no es fácil de modificar cuando no se conoce la sintaxis. – PositiveGuy

+0

incluso intenté poner eso en el gancho para precompromiso (en el lado del servidor) y mi cliente no se vio forzado a ingresar un comentario de todos modos – PositiveGuy

+1

la clave está en la línea svnlook del código. Deberá asegurarse de tener una ruta de acceso adecuada al comando svnlook para que funcione este script. –

2

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

+0

Visto esto, pero no veo una manera de limitar los comentarios o cualquier sintaxis de expresiones regulares que muestre cómo en referencia a esta aplicación. – PositiveGuy

2

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 
1

Tengo un pre-commit hook que puede hacer exactamente lo que quiere. Además de mucho más.

  • Puede especificar una longitud mínima de comentario de confirmación.
  • Puede hacer coincidir el comentario de compromiso con un regular expression. 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:

  • preparar varias cometer permisos en contra de archivos o directorios particulares:
    • lectura-escritura: El usuario puede pagar y cometer estos artículos.
    • solo lectura: El usuario puede verificar 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 le permite hacer esto:

  • Ban nombres determinado archivo a través de expresiones regulares de globbing,
  • requieren ciertos archivos o directorios tienen una propiedad particular establecido en un valor particular Muy útil para cosas como asegurarse de que las secuencias de comandos de shell, Unix Makefiles y Windows Batch de Unix tengan el final de línea correcto, o svn:ignore está configurado, 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 precompilación 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 la PC, como ActivePerl y Strawberry Perl

Cuestiones relacionadas