2010-01-05 4 views
2

Je voudrais avoid creating svn mergeinfo property sur quoi que ce soit, mais la racine des branches. Nous avons une branche de tronc et d'autres branches.Comment définir un déclencheur pour empêcher la validation de SVN avec la propriété mergeinfo?

En supposant que je ne sache absolument rien sur les déclencheurs svn, quelles sont les étapes à suivre pour configurer un hook de pré-validation qui empêche les ajouts de propriétés mergeinfo à autre chose qu'à la racine des branches?

Le coffre est situé dans la la base de dépôt "/ trunk", et toutes les branches sont dans "/ branches/foo"

Répondre

3

Fondamentalement, vous devez définir un crochet SVN pre-commit. Tout d'abord, lisez à propos de hooks in general.

Vous voudrez probablement commencer par copier le fichier pré-commit.tmpl à pre-commit, et mettre en œuvre la logique là-dedans.

Vous voudrez probablement examiner la diff de la transaction en cours d'exécution pour des lignes comme: Ajouté: svn: mergeinfo

Depuis les informations sur quel fichier cela a été ajouté pour est sur une autre ligne, vous pourriez avoir besoin un outil de traitement plus complexe que grep - peut-être un simple script perl.

Lorsque vous déterminez qu'une transaction a une propriété supplémentaire que vous ne voulez pas, vous pouvez bloquer le commettras; ou, si vous êtes particulièrement audacieux, vous pouvez essayer de modifier la transaction et continuer.

+1

FTA: Avertissement Alors que les scripts de crochet peuvent faire presque tout, il y a une dimension dans laquelle les auteurs de script crochet doivent faire preuve de retenue: ne modifie pas une transaction à l'aide de scripts commettras crochet. Bien qu'il soit tentant d'utiliser des scripts hook pour corriger automatiquement les erreurs, les failles ou les violations de règles présentes dans les fichiers en cours de validation, cela peut entraîner des problèmes. – dpurrington

+0

BTW, c'est une bonne réponse. Pour clarifier, un crochet est juste un script. Utilisez svnadmin pour interroger le repo ou la transaction et renvoyer un code de sortie différent de zéro pour rejeter le commit. – dpurrington

+0

Je suis d'accord. En général, un hook ne doit pas être utilisé pour modifier la validation en cours. – Avi

1

Ce qui suit devrait fonctionner. Votre référentiel a déjà le svn: mergeinfo sur le tronc, donc vous ne voulez plus jamais que quelqu'un en rajoute un.

Par ailleurs, notre crochet réelle assure également que tous les commits est accompagné d'un message de journal et protège également contre la suppression de certains de nos importants répertoires de niveau supérieur via un navigateur repo.

@echo off 

set logfile=%TEMP%\%2.txt 

"c:\program files\subversion\svnlook" log -t %2 %1 > %logfile% 

for /f "tokens=1,2*" %%i in (%logfile%) do (
    if %%i==UU goto checkmergetracking 
) 

for /f "tokens=1,2*" %%i in (%logfile%) do (
    if %%i==_U goto checkmergetracking 
) 

del %logfile% 
exit 0 

:checkmergetracking 
"c:\program files\subversion\svnlook" diff -t %2 %1 > %logfile% 
find "Added: svn:mergeinfo" %logfile% 
if ERRORLEVEL 1 goto nomergeinfo 

del %logfile% 
echo "Addition of Merge Info Not Allowed" >&2 
exit 1 

:nomergeinfo 
del %logfile% 
exit 0 
Questions connexes