2009-05-15 19 views
38

Estoy escribiendo una secuencia de comandos que agregará un nuevo proyecto en el repositorio, en función del nombre proporcionado por el usuario. Parte de esto implica verificar que una url con el mismo nombre no exista en el repositorio.Comprueba que no existe una url de repositorio svn

En el repositorio, todos los proyectos de nuestro equipo se almacenan en

https://developernetwork.repo.net/svn/Projects/

Digamos que el usuario quiere llamar el proyecto "Calculadora" y ejecuta el script. En este caso, tenemos que asegurarnos de que el siguiente no existe en el repositorio

https://developernetwork.repo.net/svn/Projects/Calculator/

¿Hay un comando svn que puedo utilizar para lograr eso? Desafortunadamente no puedo ver un comando apropiado que pueda usar en la documentación de svn (http://svnbook.red-bean.com/en/1.0/svn-book.html).

+3

La documentación que enlace a está fuera de fecha, para SVN 1.0. Lea http://svnbook.red-bean.com/nightly/en/index.html para obtener los últimos documentos. –

Respuesta

37

sólo puede utilizar

svn ls https://developernetwork.repo.net/svn/Projects/Calculator/ 

Se le dirá si existe el repositorio (directorio) o no.

actualización

de directorios con muchos archivos de uso:

svn ls http://server/svn/foo --depth empty 
+0

Esto funciona. Si el directorio no existe, aparece el siguiente error: svn: URL 'https://developernetwork.repo.net/svn/Projects/Calculator/ ' inexistente en esa revisión. Esa debería ser una cadena de búsqueda lo suficientemente buena. Solo por curiosidad, ¿hay una forma mejor para que el script analice los resultados que buscar el resultado de texto para una coincidencia "inexistente en esa revisión"? – Andy

+0

Como se sugirió en el otro comentario, la búsqueda de 'inexistente' podría no ser ideal ya que el mensaje de error cambia de una versión a otra, p. Ej. svn 1.6.1 ha cambiado el mensaje de error a 'svn: No se ha encontrado ningún repositorio en' svn + ssh: // '. Sin embargo, el análisis de xml no es confiable a partir de svn 1.6.1, si el repositorio no aparece, devolverá un xml incompleto que no es analizable. Eso lo empeoraría. La mejor manera en que puedo pensar es simplemente para verificar si el URL del repositorio original que envió está en el mensaje de devolución. Parece que está garantizado que se devolverá si algo salió mal. – Liwen

+0

Gracias. Tener que analizar la salida de texto de los comandos es uno de los aspectos menos agradables de los scripts, pero tiene que hacerse. Voy a verificar la url del repositorio en el mensaje de retorno a continuación. – Andy

8

Para recibir información sobre cualquier repositorio existente (por ejemplo, para posiblemente enriquecer un mensaje de error) también se podría utilizar

svn info https://developernetwork.repo.net/svn/Projects/Calculator/ 

Para un proyecto que no existe, simplemente devolverá

svn: Could not open the requested SVN filesystem 
+0

En realidad, mi versión de Slik SVN volvió: https://developernetwork.repo.net/svn/Projects/Calculator/ : (No es una URL válida) SVN: Se produjo un problema; ver otros errores para más detalles Sin embargo, "No es una URL válida" debería ser lo suficientemente buena cadena de búsqueda. Recién salido de interés, ¿hay una forma mejor para que el script analice los resultados que buscar el texto para una cadena de "URL no válida"? – Andy

+0

Teniendo en cuenta los diferentes posibles mensajes de error que puede generar una compilación diferente de svn, debería considerar analizar la cadena de salida para un patrón positivo en lugar de un negativo. Es decir, prueba la aparición de algo que no obtendrás cuando el repositorio NO exista. Aquí, CollabNet SVN 1.6.1 (Windows) proporciona la capacidad de activar la salida xml mediante el parámetro '--xml'. Personalmente, solo verificaría la existencia del elemento UUID, que debería incluirse en cualquier información 'info' (corríjame si no). – amain

+0

Gracias. Ni siquiera tenemos el servidor 1.5.0 ejecutándose todavía, así que anotaré su comentario y lo pondré en la lista de tareas pendientes. – Andy

40

En lugar de la comprobación de las cadenas de retorno me acaba de comprobar si el código de retorno:

tanto

svn ls REPOSITORY/PATH 

y

svn info REPOSITORY/PATH 

retorno 0 si todo iba bien, y 1 si las cosas salieron mal; se puede comprobar rápidamente hacia fuera:

echo $? 

por lo que en un script bash simplemente hacer algo como:

error=$? 
if [ $error -ne 0 ]; then 
     YOUR ERROR HANDLING 
fi 

obras como un regalo!

+0

Gracias por tu comentario. ¿Es posible hacerlo en medio de un script de Perl? En cualquier caso, esto se ha convertido en una cuestión académica ya que el proyecto en el que estaba trabajando ha sido eliminado. – Andy

+1

lo siento por su proyecto! con suerte, esta respuesta será útil para otra persona .. – Stefano

+3

Esto debe marcarse como la respuesta correcta – MatteoSp

2

Me enfrento al problema anterior e intenté todo el camino. no funciona para mí ... si accedemos a svn con una ruta que no está en svn, ha fallado con el error y el script de shell se romperá.

En lugar de acceder a una ruta de acceso desconocida, lo que hice fue obtener la lista de directorios de la carpeta principal y comprobar si la coincidencia de uno contiene o no.

obtener todos los proyectos forman su directorio padre (si usted quiere encontrar una etiquetas específicas a continuación, su ruta del directorio padre debe ser https://developernetwork.repo.net/svn/Projects/Calculator/tags)

projects=$(svn ls https://developernetwork.repo.net/svn/Projects/) 

a continuación, comprobar que existe la carpeta del proyecto. Recuerde agregar / después del nombre de su proyecto.

projectName="Calculator/" 
for i in $projects; do 
    if [ "$i" == "$projectName/" ]; 
     then 
     echo Project Exist 
     else 
     echo Project does not exist 
    fi 
done 

simple.

1

Hubiera comentado una respuesta existente pero no tengo suficiente reputación.

Quería encontrar si un archivo se había importado con éxito o no, así que probé "svn info" y "svn ls" con "echo $?". Solo pude obtener un código de retorno cero/distinto de cero cuando utilicé "svn ls": "svn info" siempre devolvía cero.

Esto fue con la subversión 1.5.5 en Redhat RHEL6.

0

Como dice @A Scott, el echo $? no se puede utilizar para saber si la URL es correcta (estoy en Mac OS 10.11 y el cliente SVN 1.9.5).

Para lectores potenciales futuras, utilizo esta solución:

content=$(svn info $SVN_TAG_URL) 

if [[ -z $content ]]; then 
    echo "The SVN URL doesn't exist"; exit 
fi 
Cuestiones relacionadas