Comment obtenir un rapport de responsabilité svn récursif dans un fichier XML unique pour tous les fichiers non binaires d'une branche?

StackOverflow https://stackoverflow.com/questions/413777

Question

Comment puis-je obtenir un rapport de responsabilité svn entièrement récursif sur tous les fichiers non binaires d'une branche, dans lequel la sortie est dans un fichier unique au format xml et comprend les versions de révision, date, auteur, nom de fichier & amp; chemin, et le texte de la ligne du fichier lui-même? La totalité de la sortie doit figurer dans un seul fichier. Il sera exécuté dans le cadre de la construction via une instance CCNet.

Les outils disponibles sont la dernière version stable de nant et nantcontrib, msbuild et la dernière ligne de commande svn.

Voici quelques-uns des problèmes rencontrés: ligne de commande, la commande svn blame ne prend pas en charge la récurrence de répertoire. L'option --xml de Blame n'inclut pas le texte réel de chaque ligne, bien qu'elle contienne tout le reste. Par défaut, nantcontrib transmet le paramètre --quiet (contrairement à la référence de la tâche), qui n'est pas pris en charge par la commande blame. La tâche svn de Nantcontrib peut ne pas accepter le paramètre --xml.

Était-ce utile?

La solution

La réponse simple est qu’il n’ya pas de moyen facile de le faire. Le meilleur moyen, le plus correct, serait d'écrire votre propre client svn (ou d'étendre celui existant) de manière à ce qu'il ait les fonctionnalités dont vous avez besoin. À peine trivial.

Il existe également une mauvaise façon de procéder, qui consiste également à écrire du code. Ne faites pas cela :

find . -type f | grep -v .svn | xargs svn blame > line_data
find . -type f | grep -v .svn | xargs svn --xml blame > xml_data

Vous pouvez créer un script pour les deux commandes svn afin d'éviter d'exécuter find à deux reprises, mais cela sera toujours extrêmement lent. Pour ajouter une insulte à une blessure, vous devrez ensuite analyser les deux fichiers vous-même pour ajouter les lignes source réelles aux données XML.

Malheureusement, je pense que c’est l’étendue de la prise en charge de ce que vous voulez avec le client svn standard, et je ne trouve aucun autre client qui fasse mieux (certains ne supportent même pas blame ).

Autres conseils

Je ne sais pas quel système d’exploitation vous utilisez. Mais vous pouvez essayer d’utiliser une simple boucle FOR et la commande "svn ls -R". Pour lister de manière récursive tous les fichiers de votre branche (workspace / url), puis dirigez-le vers "svn blame --xml".

J'ai essayé ceci dans mon invite de ligne de commande SVN et cela fonctionne correctement (Windows XP, SVN 1.4.4). La commande que j'ai utilisée est la suivante:

FOR / F "usebackq delims ==" % i IN ( svn ls -R http: // myurl / mybranch ) DO blâme @svn --xml% i

Remarque: vous pouvez éviter les "URL non trouvées". type d'erreur si vous tapez cette commande dans un espace de travail (reflétant la racine de votre branche) et utilisez 'svn ls -R` à la place de l'URL de la commande ci-dessus.

J'espère que cela vous aidera.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top