Come impostare un trigger per evitare impegna a SVN con la proprietà mergeinfo?
-
18-09-2019 - |
Domanda
Mi piacerebbe evitare di creare SVN mergeinfo proprietà su altro che la radice di rami. Abbiamo un ramo tronco e alcuni altri rami.
Supponendo che ne so assolutamente nulla di trigger svn, quali passi devo seguire per impostare un pre-commit hook che impedisce aggiunte di proprietà mergeinfo a nulla ma la radice dei rami?
Il tronco si trova nella base del repository "/ trunk", e tutti i rami sono in "/ rami / pippo"
Soluzione
In sostanza, è necessario definire uno SVN pre-commit hook . Prima, però, leggere su ganci in generale .
È probabile che vuole iniziare con la copia del file pre-commit.tmpl a pre-commit
, e implementare la logica in là.
È probabile che vuole esaminare il diff della transazione attualmente in esecuzione per linee come: Aggiunto: svn: mergeinfo
Dal momento che le informazioni su quale file questo è stato aggiunto per è su una linea diversa, potrebbe essere necessario uno strumento di elaborazione più complessa di grep -. Forse un semplice script perl
Quando si determina che una transazione ha una proprietà ha aggiunto che non si desidera, è possibile bloccare il commit; o, se si è particolarmente audaci, si potrebbero tentare di modificare la transazione e continuare.
Altri suggerimenti
Il seguente dovrebbe funzionare. Il repository ha già la svn: mergeinfo sul tronco, in modo da non voglio che nessuno di aggiungerne uno nuovo.
A proposito, il nostro gancio reale assicura anche che ogni commit è accompagnata da un messaggio di log e protegge contro la cancellazione di alcuni nostri importanti directory primarie tramite browser repo anche.
@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