Comment définir un déclencheur pour empêcher commits SVN avec la propriété mergeinfo?
-
18-09-2019 - |
Question
Je voudrais éviter de créer svn mergeinfo sur quoi que ce soit, mais la racine des branches. Nous avons une branche de tronc et d'autres branches.
En supposant que je ne sais absolument rien sur les déclencheurs svn, quelles mesures dois-je suivre pour construire un crochet pre-commit qui empêche les ajouts de propriétés mergeinfo à quoi que ce soit, mais la racine des branches?
Le coffre est situé dans la base "/ trunk" du dépôt, et toutes les branches sont dans "/ branches / foo"
La solution
En gros, vous devez définir un SVN pre-commit crochet . Mais d'abord, lisez crochets général.
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 les lignes comme: Ajouté: svn: mergeinfo
Depuis les informations sur ce fichier qui a été ajouté pour est sur une autre ligne, vous pouvez avoir besoin d'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 la validation; ou, si vous êtes particulièrement audacieux, vous pouvez essayer de modifier la transaction et continuer.
Autres conseils
Ce qui suit devrait fonctionner. Votre dépôt a déjà le svn: mergeinfo sur le tronc, vous ne voudrez plus jamais quelqu'un d'ajouter un nouveau.
Par ailleurs, notre crochet réelle assure 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