web-dev-qa-db-fra.com

Vérifiez qu'il n'y a pas d'URL de référentiel svn

J'écris un script qui ajoutera un nouveau projet dans le référentiel, basé sur le nom fourni par l'utilisateur. Cela implique notamment de vérifier qu’une URL portant le même nom n’existe pas déjà dans le référentiel.

Dans le référentiel, tous les projets de notre équipe sont stockés dans

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

Supposons que l'utilisateur souhaite appeler le projet "Calculatrice" et exécute le script. Dans ce cas, nous devons nous assurer que les éléments suivants n'existent pas déjà dans le référentiel

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

Existe-t-il une commande svn que je peux utiliser pour accomplir cela? Malheureusement, je ne peux pas voir la commande appropriée que je peux utiliser dans la documentation svn ( http://svnbook.red-bean.com/fr/1.0/svn-book.html ).

40
Andy

Vous pouvez simplement utiliser 

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

Il vous dira si le référentiel (répertoire) existe ou non.

Mettre à jour

pour les répertoires contenant de nombreux fichiers, utilisez: 

svn ls http://server/svn/foo --depth empty
42
Liwen

Au lieu de vérifier les chaînes de retour, je voudrais simplement vérifier le code de retour:

tous les deux

svn ls REPOSITORY/PATH

et

svn info REPOSITORY/PATH

renvoyer 0 si tout s'est bien passé et 1 si les choses se sont mal passées; vous pouvez le vérifier rapidement:

echo $?

dans un script bash, faites simplement quelque chose comme:

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

fonctionne comme un régal!

43
Stefano

Pour recevoir des informations sur tout référentiel existant (par exemple, pour éventuellement enrichir un message d'erreur), vous pouvez également utiliser 

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

Pour un projet inexistant, il va simplement retourner 

svn: Could not open the requested SVN filesystem
8
amain

Je fais face au problème ci-dessus et j'ai tout essayé. ne fonctionne pas pour moi .. si nous accédons à svn avec un chemin qui n’est pas dans svn, c’est avec une erreur que le script shell va s’écrouler.

Au lieu d’accéder à un chemin inconnu, j’ai obtenu la liste de répertoires du dossier parent et vérifié si celui-ci contient ou non.

Obtenez tous les projets de votre répertoire parent (si vous souhaitez trouver une balise spécifique, le chemin de votre répertoire parent doit être https://developernetwork.repo.net/svn/Projects/Calculator/tags)

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

puis vérifiez que votre dossier de projet existe. N'oubliez pas de ajouter /après le nom de votre projet.

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

simple.

2
damithH

J'aurais commenté une réponse existante mais je n'ai pas une réputation suffisante.

Je voulais trouver si un fichier avait été importé avec succès ou pas, alors j'ai essayé "svn info" et "svn ls" avec "echo $?". Je ne pouvais obtenir un code de retour nul/non nul lorsque j'utilisais "svn ls": "svn info" renvoyait toujours zéro.

C'était avec Subversion 1.5.5 sur Redhat RHEL6.

1
A Scott

Comme @A Scott, le echo $? ne peut pas être utilisé pour savoir si l'URL est correcte (je suis sous Mac OS 10.11 et le client SVN 1.9.5).

Pour les futurs lecteurs potentiels, j'utilise cette solution de contournement:

content=$(svn info $SVN_TAG_URL)

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