Cómo establecer un disparador para evitar compromete a SVN con la propiedad mergeinfo?
-
18-09-2019 - |
Pregunta
Me gustaría evitar la creación de svn mergeinfo en nada más que la raíz de las ramas. Tenemos una rama del tronco y algunas otras ramas.
Suponiendo que no sé absolutamente nada acerca de los factores desencadenantes SVN, lo que pasos debo seguir para configurar un gancho que impide adiciones de propiedades mergeinfo a cualquier cosa, pero la raíz de las ramas?
pre-commitEl tronco se encuentra en la base del repositorio "/ tronco", y todas las ramas están en "/ ramas / foo"
Solución
Básicamente, es necesario definir un SVN gancho pre-commit . Primero, sin embargo, leer sobre ganchos en general.
Es probable que desee comenzar con la copia del archivo de pre-commit.tmpl a pre-commit
, e implementar la lógica en ese país.
Es probable que desee examinar el diff de la transacción que se está ejecutando para líneas como: Añadido: SVN: mergeinfo
Dado que la información sobre el archivo que esto se añadió a está en una línea diferente, es posible que necesite una herramienta de procesamiento más complejo que grep -. Tal vez un simple script en Perl
Cuando se determina que una transacción tiene una propiedad adicional de que no desea, puede bloquear la confirmación; o, si usted es especialmente audaz, que podrían tratar de modificar la transacción y continuar.
Otros consejos
El siguiente debería funcionar. Su repositorio ya tiene la propiedad svn: info de fusión en el tronco, por lo que nunca quiere que nadie se agregue de nuevo.
Por cierto, nuestra gancho real también se asegura de que cada confirmación se acompaña de un mensaje de registro y también protege contra la supresión de algunos de nuestros importantes directorios de nivel superior a través de navegador de repositorios.
@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