Obtener el nombre del proyecto en el gancho de la subversión posterior al comercio

StackOverflow https://stackoverflow.com/questions/6394998

  •  29-10-2019
  •  | 
  •  

Pregunta

Tengo un repositorio de subversión establecido así:

Repo
    ProjectA
        trunk
        branches
        tags
    ProjectB
        trunk
        branches
        tags

Estoy tratando de escribir un script de gancho posterior al comercio que se aplica a un proyecto, pero solo aprendí que están alojados en la raíz del repositorio.

Los únicos dos parámetros que obtengo son la ruta del repositorio y el número de revisión. ¿Hay alguna forma de ejecutar este script solo para un proyecto en particular?

Gracias,

Solución:La solución definitiva fue algo como esto:

#!/bin/bash
REPOS="$1"
REV="$2"
if svnlook changed -r $REV $REPOS | grep ProjectA; then
    echo "do stuff"
fi
¿Fue útil?

Solución

Si, usa svnlook Para obtener la lista de archivos modificados en la revisión comprometida, luego GREP en los nombres con un Regex adecuado para determinar si la ruta que el post-Commit contiene el nombre de su proyecto en el lugar correcto, si ejecuta el código, de lo contrario, salte a el final del script y devolver 0.

Otros consejos

Vine aquí buscando la respuesta a esta pregunta para Visualsvn en un servidor de Windows 2012. Después de recopilar más información, aquí está la solución que se me ocurrió para un archivo por lotes de Windows Post Commit en VisualSVN que carga un script PHP en un servidor de desarrollo para que el proyecto específico se implementa en ese servidor. El comando de gancho es una línea:

svnlook changed "%1" | findstr /L "ProjectA/trunk/" && powershell -Command "Invoke-WebRequest http://192.168.0.177/checkout_on_commit/checkout_on_commit.php -OutFile $ENV:SYSTEMROOT\Temp\commit.txt" || rem

El REM era necesario como un "no-op" para evitar que el gancho fuera reportado por Tortoise por falla por compromisos con otros proyectos. El contenido de checkout_on_commit.php que hace que el proyecto se despliegue en el servidor de Linux son:

<?php
`date >> checkout.log`;
`svn sw --non-interactive --no-auth-cache --username project_a_readonly --password trytoguess https://svnserver/svn/GroupA/ProjectA/trunk /app/www/ >> checkout.log`;
?>

En Subversion no existe una definición como un "proyecto" ... la definición debe ser realizada por usted. Esto significa que la subversión ejecuta que en el cambio en el repositorio no en la base del "proyecto" ...

Puede usar la información que obtiene como el repositorio y el número de revisión para extraer la información que necesita ... Puede hacerlo simplemente utilizando SVNPOOK para extraer la información que necesita ... llamando a Svnlook con los parámetros apropiados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top