34 votes

Windows Pre-commit hook pour la longueur des commentaires Subversion

J'ai l'impression de nulle part avec cela. Soit la recherche sur le web pour un script, etc. Quelqu'un a un script que vous pouvez simplement modifier les out-of-coffret de pré-validation.tmpl dans un environnement Windows qui nécessite de x caractères pour être saisis dans un commentaire lors de la validation de la Tortue de Subversion à l'échelle mondiale, de sorte que tous les membres de l'équipe sont nécessaires alors que cette exigence est poussé vers le bas pour les clients de serveur SVN?

Je ne connais pas le langage de script et cela devrait être quelque chose de très simple, sans me prendre le temps de comprendre les scripts pour les 3 prochaines heures.

56voto

Corey Downie Points 2494

C'est un .le fichier bat pour exiger que il y a un commentaire. Il vérifie l'existence d'au moins un caractère dans le commentaire.

 @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

Ce fichier se trouve dans /crochets dossier du référentiel, nommé pre-commit.chauve-souris. Si vous avez besoin d'un montant minimum de caractères, la ligne à modifier est

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

Donc si vous voulez un minimum de 10 caractères, vous devez avoir 10 .'s, plutôt qu'un seul

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

Plus d' options avancées pour les findstr de commande vous permettra de ne plus sophistiqué de contrôle (certains jeux de caractères, ect)

2voto

Slipfish Points 136

J'utilise SubversionNotify, il a probablement fait plus que ce dont vous avez besoin, mais il est assez simple à mettre en place.

1voto

David W. Points 49436

J'ai un pre-commit hook qui peut faire exactement ce que vous voulez. Plus beaucoup plus.

  • Vous pouvez spécifier une longueur minimale de commettre un commentaire.
  • Vous pouvez faire correspondre la validation des commentaires à l'encontre d'une expression régulière. Non seulement vous pouvez spécifier une longueur, mais vous pouvez également spécifier certains paramètres. Par exemple, le fait de commettre des commentaires contiennent un numéro de bogue que votre suivi des défauts système utilise, de sorte que vous pouvez retracer le passage à un défaut particulier?

Il vous permet également d'effectuer les opérations suivantes:

  • Définir les différentes commettre des autorisations à l'égard de certains fichiers ou répertoires:
    • lecture-écriture: l'Utilisateur peut commander et validation de ces éléments.
    • lecture seule: l'Utilisateur peut checkout ce point, mais ne peut pas valider les modifications.
    • ajoutez-ohly: l'Utilisateur peut ajouter un répertoire via svn cp, mais pas de valider les modifications. C'est parfait pour l' /tags répertoire où vous êtes autorisé à faire un tag, mais pas de modifier le tag.
    • sans supprimer: les Utilisateurs peuvent valider les modifications et ajouter de nouveaux fichiers, mais pas de supprimer ces fichiers.
    • sans ajouter: les Utilisateurs ne peuvent valider les modifications, et de ne pas ajouter ou supprimer des fichiers dans un commit.

Et, il vous permet également de faire ceci:

  • Interdiction de certains noms de fichiers via des expressions régulières de l' expansion,
  • Besoin de certains fichiers ou répertoires ont une propriété particulière définie à une valeur particulière. Très utile pour des choses comme s'assurer que les scripts shell Unix, Unix Makefiles, Windows et les fichiers Batch avoir la bonne fin de ligne, ou svn:ignore est définie, de sorte que les utilisateurs ne l'avez pas accidentellement s'engager dans des fichiers, ils ne devraient pas s'engager.
  • Besoin de certaines révisions propriétés à définir avec certaines valeurs. C'est comment vous vérifiez les messages de commit, mais en disant que svn:log doit correspondre à certaines des expressions régulières.

Cette pre-commit script est écrit en Perl. Par défaut, Perl est livré avec Unix, Mac, et Linux serveurs. Malheureusement, il n'est pas inclus sur les ordinateurs Windows. Heureusement, il existe plusieurs open source, gratuit et facile à installer des paquets Perl pour le PC comme ActivePerl et Strawberry Perl

0voto

Nick Points 11

Essayez ceci :

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  

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X