6
votes

Comment puis-je déterminer si un répertoire fait partie d'une copie de travail de subversion?

J'ai un script qui copie certains fichiers dans un projet. Un tel projet est généralement une copie de travail de subversion, mais pas toujours. S'il s'agit d'une copie de travail, je souhaite ajouter automatiquement les fichiers à Subversion. Mais comment savoir que le répertoire fait partie d'une copie de travail de subversion? Jusqu'à présent, j'ai vérifié un sous-dossier .svn, mais cela ne fonctionne pas avec Subversion 1.7. J'ai juste besoin de savoir si svn ajoutez des fichiers ... fonctionnera, aucune autre donnée n'a besoin d'être extraite.

svn

0 commentaires

4 Réponses :


4
votes

Il suffit d'exécuter SVN Statut code>. Vous obtiendrez un message comme ce qui suit si ce n'est pas une copie de travail: xxx pré>

edit: strong> Si vous êtes préoccupé par la nature récursive de svn Statut code> Vous pouvez limiter la profondeur par (en fonction de la version du client) soit P>

svn status --non-recusive


5 commentaires

Statut SVN n'est pas une bonne idée, car il s'agit d'une opération récursive qui pourrait prendre un certain temps. Je devrais tester la bonne option non récursive. Le message pourrait être dans une langue différente, ce qui rend difficile d'analyser.


@ user909066 - J'ai ajouté des informations sur une option non récursive.


- Profondeur = vide retourne a. dans mon cas de test. Ce n'est pas une chaîne vide. Un client ancien retourne svn: option non valide: --depth = vide . Je préfère une solution plus portable.


@ user909066 - intéressant, j'ai rencontré plusieurs cas de test et je n'ai jamais reçu une chaîne renvoyée de - profondeur = vide ; Je vais mettre à jour le texte. En ce qui concerne la compatibilité, et comme indiqué dans le texte, il y avait un déménagement de (désormais obsolète) - non récursif à plus de fonctionnalités - profondeur = ... .


L'option --xml de SVN est destinée à protéger l'utilisateur des différences dans la sortie, comme une locale différente.



3
votes

Vous pouvez utiliser la propriété Info SVN, puis le tuyau pour simplement obtenir l'URL comme suit: xxx pré>

puis chargez cette sortie dans une autre variable et vous pourriez travailler avec elle comme: P >

set /p urlRepo= <urlText
del urlText


3 commentaires

Je n'ai pas besoin de l'URL. Au moins svn info donne un statut de sortie non nul s'il ne s'agit pas d'une copie de travail. Mais est-ce que le statut de sortie fiable?


c'était juste un exemple .. vient de choisir l'une de ces propriétés .. Ça devrait aller bien


Donc, l'idée est d'analyser une chaîne qui n'existe que s'il s'agit d'une copie de travail, par ex. "^ URL:". L'option -r n'est pas nécessaire dans ce cas.



0
votes

Vous faites un script afin ... Solution dans le formulaire de script :)

 REPO="http://repository_url"
 WCDIR="dir_you_are_checking"
 WCBRANCH=`svn info ${WCDIR} 2> /dev/null | grep "^URL:" | cut -d" " -f2 | sed s,${REPO}/,,`
 if [ -z "${WCBRANCH}" ]
 then
   echo "Error: directory ${WCDIR} exists and is not part of a working copy."
   exit 1
 fi
 # WCBRANCH will contain the WCDIR path inside repository


0 commentaires

0
votes

une version plus simple de cette solution: xxx


1 commentaires

Si le répertoire est une copie de travail d'une version plus ancienne SVN, vous obtenez un message "Merci de mettre à niveau" après avoir rejeté l'erreur standard, mais {wcbranch} est toujours 0. Est-ce que cela s'applique à tous les messages que le client SVN peut émettre? Pour moi cela semble risqué.