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 ... code> fonctionnera, aucune autre donnée n'a besoin d'être extraite. P>
4 Réponses :
Il suffit d'exécuter edit: strong> Si vous êtes préoccupé par la nature récursive de SVN Statut code>. Vous obtiendrez un message comme ce qui suit si ce n'est pas une copie de travail:
svn Statut code> Vous pouvez limiter la profondeur par (en fonction de la version du client) soit P>
svn status --non-recusive
Statut SVN CODE> 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 code> retourne
a. code> dans mon cas de test. Ce n'est pas une chaîne vide. Un client ancien retourne
svn: option non valide: --depth = vide code>. 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 code>; 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 code> à plus de fonctionnalités
- profondeur = ... code >.
L'option --xml de SVN est destinée à protéger l'utilisateur des différences dans la sortie, comme une locale différente.
Vous pouvez utiliser la propriété Info SVN, puis le tuyau pour simplement obtenir l'URL comme suit: puis chargez cette sortie dans une autre variable et vous pourriez travailler avec elle comme: P > set /p urlRepo= <urlText
del urlText
Je n'ai pas besoin de l'URL. Au moins svn info code> 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 code> n'est pas nécessaire dans ce cas.
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
une version plus simple de cette solution:
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é.