¿Gancho posterior a la confirmación de pago múltiple de Subversion?

¿Gancho posterior a la confirmación de pago múltiple de Subversion?

El título debe sonar extraño pero estoy intentando lograr lo siguiente:

Ubicación del repositorio SVN: /home/flx/svn/flxdev Estructura "flxdev" del repositorio SVN:

 + Project1
 ++ files
 + Project2
 + Project3
 + Project4

Estoy intentando configurar un enlace posterior a la confirmación que se verifica automáticamente en el otro extremo cuando hago una confirmación.

El documento posterior a la confirmación enumera explícitamente lo siguiente:

# POST-COMMIT HOOK
#
# The post-commit hook is invoked after a commit.  Subversion runs
# this hook by invoking a program (script, executable, binary, etc.)
# named 'post-commit' (for which this file is a template) with the
# following ordered arguments:
#
#   [1] REPOS-PATH   (the path to this repository)
#   [2] REV          (the number of the revision just committed)

Entonces hice el siguiente comando para probar:

REPOS="$1"
REV="$2"
echo "Updated project $REPOS to $REV"

Sin embargo, cuando edito archivos en Proyecto1, por ejemplo, esto genera"Proyecto actualizado /home/flx/svn/flxdev a 1016"

Me gustaría que esto fuera:"Proyecto actualizado Proyecto1 a 1016"

Tener esta variable me permite especificar realizar diferentes acciones por proyecto después de la confirmación. ¿Cómo puedo especificar el parámetro del proyecto?

¡Gracias!

Dennis

Respuesta1

Lo siguiente podría hacer lo que quieras:

#!/bin/bash

REPOS="$1"
REV="$2"

echo In revision $REV, the following projects were changed:
svnlook dirs-changed "$REPOS" --revision "$REV" \ 
    | sed 's%/.*%%' \
    | sort -u \
    | while read PROJ ; do
          echo "$PROJ"
      done

Una explicación de lo que está pasando, en caso de que no esté muy familiarizado con los scripts de shell:

  • utilizamos svnlookpara obtener la lista de directorios que fueron modificados
  • Solemos sedcortar el primer " /" y todo lo que sigue, para tener una lista de nombres de proyectos, posiblemente con duplicados.
  • Usamos sort -u("ordenar único") para eliminar duplicados.
  • Uno por uno, leemos cada nombre en $PROJ y hacemos algo con él.

Puedes reemplazar la echo "$PROJ"línea con lo que quieras hacer con el nombre del proyecto. Si se cambiaron varios proyectos en la misma confirmación, lo que ponga allí se ejecutará una vez por cada proyecto modificado, con $PROJ configurado adecuadamente.

Este script no mostrará si se agregaron archivos a la raíz del repositorio, pero si se agregaron directorios, aparecerán en la lista de proyectos modificados. Si desea que la raíz también aparezca en la lista, puede sustituir la siguiente línea sed y aparecerá como "/". Si hace esto, tenga cuidado de no consultar todo el repositorio por accidente.

...
    | sed '/^\/$/!s%/.*%%' \
...

información relacionada