Liste tous les svn: externals récursivement?

Comment puis-je obtenir la liste de tous les svn: externals (récursivement) dans un répertoire? Y a-t-il une utilité pour cela?

(J’utilise Windows (et tortue))

J’ai un tas de svn: externals liant à différentes parties partagées de mon projet et moi quand je twig, il est généralement assez enclin à l’erreur de trouver tous les externes et les a changés de sorte que le lien aux chemins dans la nouvelle twig.

Procédez comme suit dans la racine de votre copie de travail:

svn propget svn:externals -R 

Comme discuté dans les commentaires ci-dessous, cela ne répertorie pas les externes dans les externes.

Note pour les utilisateurs de TortoiseSVN: il existe une option dans le programme d’installation de TortoiseSVN pour installer également le client de ligne de commande SVN. Cette option n’est pas activée par défaut.

Changer manuellement toutes ces propriétés externes semble fastidieux. Avez-vous examiné les nouvelles fonctionnalités pour les externes ajoutées dans Subversion 1.5?

Subversion 1.5 fait un grand pas en avant pour soulager ces frustrations. Comme mentionné précédemment, les URL utilisées dans le nouveau format de définition des externalités peuvent être relatives et Subversion fournit une magie de syntaxe pour spécifier plusieurs variantes de la relativité des URL.

../

Relatif à l’URL du répertoire sur lequel la propriété svn: externals est définie

^ /

Relatif à la racine du référentiel dans lequel la propriété svn: externals est versionnée

//

Relatif au schéma de l’URL du répertoire sur lequel la propriété svn: externals est définie

/

Relatif à l’URL racine du serveur sur lequel la propriété svn: externals est versionnée

Peut-être l’un de ces aiderait-il? Je suppose que cela dépend exactement de la manière dont vous vous twigz et de la structure de votre référentiel.

Ma solution de contournement pour TortoiseSVN:

Ouvrez la boîte de dialog “Branche / tag …” du menu contextuel SVN. La boîte de dialog inférieure affiche tous les éléments externes, y compris les externes nesteds.

Pour contourner ce problème, vous pourriez peut-être structurer votre projet de manière à ce que toutes les externes soient définies dans le même dossier, par exemple dans le dossier du projet situé juste au-dessous du tronc. (Cela ne signifie pas que tous les dossiers externes doivent être à la même profondeur au passage.) Ensuite, vous pouvez cliquer avec le bouton droit sur votre dossier de projet, puis sur Propriétés …, puis sur l’onglet Subversion, puis sur Propriétés … double-cliquez sur svn: externals.

J’ai utilisé la réponse de Wim Coenen et j’ai écrit le script suivant pour créer une liste de toutes les révisions:

 getSvnRevs() { cd "$1" wcver="$(svnversion)" [ -n "$wcver" ] || panic "Unable to get version for $wcdir" echo "$1: $wcver" svn propget svn:externals -R | while read abcde; do [ -n "$a" ] || continue if [ "$b" = "-" ]; then wcparent="$a" wcdir="$wcparent/$c" [ -z "$e" ] || panic "Invalid format #1" else [ -n "$wcparent" ] || panic "Invalid format #2" wcdir="$wcparent/$a" [ -z "$c" ] || panic "Invalid format #3" fi [ -d "$wcdir" ] || panic "Invalid directory: $wcdir" wcver="$(svnversion "$wcdir")" [ -n "$wcver" ] || panic "Unable to get version for $wcdir" echo "$1/$wcdir: $wcver" done } 

Heureusement, je n’ai pas d’extérieurs nesteds, donc je n’ai pas eu à tester cela et je suppose que cela ne fonctionnerait pas. Mais si vous en avez besoin, il suffit probablement d’appeler cette fonction récursivement. De plus, je n’ai jamais testé avec des noms de fichiers qui doivent s’échapper. Cela ne fonctionnera probablement pas alors.

AVERTISSEMENT: Je sais que la question initiale portait sur Windows, et le script shell ne fonctionnera pas à moins d’utiliser cygwin ou similaire.

J’ai pris la réponse de Daniel Alder , enlevé les appels svnversion et l’ai rendu récursif (NOTE: read abcde ne fonctionne pas s’il y a un espace dans la source ou la destination). Ceci est un script bash, vous aurez donc besoin de quelque chose comme Cygwin ou utilisez le sous-système Windows pour Linux .

 getSvnExternals() { svnbase="$1" svnpath="$2" svn propget svn:externals -R "$svnbase/$svnpath" 2> /dev/null | while read abcde; do [ -n "$a" ] || continue if [ "$b" = "-" ]; then wcparent="$a" external="$c" wcdir=$(echo "$wcparent/$d" | sed s#^./##) [ -z "$e" ] || echo "WARNING: Invalid format #1. line='$a $b $c $d $e'" else [ -n "$wcparent" ] || echo "WARNING: Invalid format #2. wcparent=$wcparent" external="$a" wcdir=$(echo "$wcparent/$b" | sed s#^./##) [ -z "$c" ] || echo "WARNING: Invalid format #3. line='$a $b $c $d $e'" fi echo "$1/$wcdir: $external" ## recurse into external directory [ -d "$wcdir" ] && getSvnExternals "$1/$wcdir" done }