2009-01-05 3 views
2

Comment puis-je obtenir un rapport svn blame entièrement récursif pour tous les fichiers non-binaires dans une branche, où la sortie est dans un seul fichier au format xml et comprend la révision, la date, l'auteur, le chemin et le texte du ligne du fichier lui-même? La sortie entière doit être dans un seul fichier. Il sera exécuté dans le cadre de la construction via une instance CCNet.Comment obtenir un rapport svn blame récursif dans un seul fichier xml pour tous les fichiers non-binaires dans une branche?

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 que j'ai rencontrés: La commande svn blame de la ligne de commande ne supporte pas la récursion d'annuaire. L'option --xml de Blame n'inclut pas le texte réel de chaque ligne, bien qu'elle ait 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 supporté par la commande blame. La tâche svn Nantcontrib peut ne pas accepter le paramètre --xml.

Répondre

2

La réponse simple est qu'il n'y a aucun moyen facile de le faire. La meilleure façon, la plus correcte serait d'écrire votre propre client svn (ou d'étendre celui qui existe déjà) pour qu'il ait la fonctionnalité dont vous avez besoin. Difficile à peine.

Il y a aussi une mauvaise façon de le faire, ce qui implique également l'écriture de code. Ne le faites pas:

 
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 les deux scripts svn commandes ensemble pour éviter de find deux fois, mais cela encore atrocement lent. Pour ajouter une insulte à une blessure, vous devrez ensuite analyser les deux fichiers vous-même pour ajouter les lignes source réelles dans les données XML. Malheureusement, je pense que c'est la mesure de la prise en charge de ce que vous voulez avec le client svn standard, et je ne trouve pas d'autres clients qui font mieux les choses (certains ne supportent même pas blame).

1

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 façon récursive tous les fichiers de votre branche (espace de travail/URL), puis la rediriger vers "svn blame --xml".

J'ai essayé ceci dans mon invite de ligne de commande SVN et cela fonctionne très bien (Windows XP, SVN 1.4.4). La commande I utilisée est la suivante:

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

Note: Vous pouvez éviter certains « url not found "type d'erreur si vous tapez cette commande dans un espace de travail (reflétant votre racine de branche) et utilisez le" svn ls -R "au lieu de l'url dans la commande ci-dessus.

Espérons que cela aide.

+0

Les informations de ligne ne sont pas incluses de cette façon. Merci quand même. –

Questions connexes