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 ).
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
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!
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
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.
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.
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