svn pre-commit-hook mergeinfo

Svn pre-commit hook para deshabilitar svn: mergeinfo en directorios no raíz



pre-commit-hook (2)

Antes que nada, recomendaría usar Perl o Python para hacer la tarea, Windows Batch deja mucho que desear.

Puede usar algún script de ejemplo de http://svn.apache.org/repos/asf/subversion/trunk/tools/hook-scripts/ para comenzar. Por ejemplo, el script verify-po.py comprueba las codificaciones de los archivos y commit-access-control.pl.in comprueba si el autor tiene permisos para confirmar. Probablemente emplees svnlook diff en tu script (como en este último) para obtener propiedades modificadas para directorios y recorrer las rutas correspondientes, ya sean ramas o etiquetas con expresión regular.

Actualizar

Found enforcer pre-commit hook script que parece ser lo que estás buscando.

Lo que hace este script es que usa svnlook para ver en la transacción el progreso. A medida que avanza en la transacción, llama a un conjunto de enlaces que permiten al administrador del repositorio examinar lo que está sucediendo y decidir si es aceptable.

Contiene varios métodos y verify_property_line_added () entre ellos, ya que se llama para cada línea que se agrega a una propiedad en un archivo .

Me gustaría utilizar un enlace precompromiso que impida que los desarrolladores configuren svn: mergeinfo en directorios no raíz. Es decir, quiero hacer cumplir que svn: mergeinfo solo se puede establecer en directorios como "trunk" o "branches / branchName". Los desarrolladores a veces necesitan que se les "recuerde" que no es una buena práctica usar un subdirectorio de la raíz como objetivo de fusión (según las mejores prácticas enumeradas aquí ). ¿Alguien tiene una secuencia de comandos de gancho o saber dónde podría encontrar uno? Estoy en un entorno de Windows, por lo que sería preferible usar lotes o Powershell, pero cualquier cosa sería útil.


Si puede CPAN en el servidor:

https://github.com/gnustavo/SVN-Hooks/blob/master/examples/check-mergeinfo.pl

Si no (basado en http://comments.gmane.org/gmane.comp.version-control.subversion.user/118969 ):

REPOS="$1" TXN="$2" SVNLOOK=/usr/bin/svnlook if !($SVNLOOK log -t "$TXN" "$REPOS" | grep -q ''/[override] '';) then # Get list of paths which have changed TXN_PATHS=$($SVNLOOK changed -t "$TXN" "$REPOS") # Filter those which are allowed: /trunk, /branches/*,... TXN_PATHS=$(echo "$TXN_PATHS" | grep -Ev "^....(trunk/|branches/[^/]+/)$") # Iterate over all paths, which are not allowed to have mergeinfo while IFS= read -r TXN_PATH; do ELEM_PATH=$(echo "$TXN_PATH" | cut -c 5-) MERGEINFO=$($SVNLOOK propget "$REPOS" svn:mergeinfo -t "$TXN" "$ELEM_PATH" 2>/dev/null) if [ ! "$MERGEINFO" = "" ]; then echo " Cannot merge into directory that is not trunk or a branch:" >&2; echo " $ELEM_PATH" >&2; echo " Override by using [override]." >&2; exit 1; fi done <<< "$TXN_PATHS" # echo "Merge info check: OK" fi