2010-02-08 5 views
11

Contexte: écrire un script de libération automatique pour exporter les fichiers modifiés entre les versions de SVN et télécharger vers le serveur distant. La commande svn log affiche les propriétés modifiées et, mais ne semble pas distinguer sa sortie verbeuse entre une modification de contenu et des modifications de propriété.comment détecter les propriétés modifiées à l'aide du journal SVN

Suis-je en train de lire cette sortie mal, ou est-il un moyen facile d'obtenir une liste des fichiers modifiés entre révisions tout en ignorant prop changements

Voici mes exemples cmd:

#: svn log "someurl" -r 2210:HEAD -v -q 

Output: 
------------------------------------------------------------------------ 
r2211 | author | 2010-02-08 12:36:56 +1300 (Mon, 08 Feb 2010) 
Changed paths: 
    M /branches/project/release-v1-r-maintenance 
    M /branches/project/release-v1-r-maintenance/offroot/ 
    M /branches/project/release-v1-r-maintenance/offroot/test.config 
------------------------------------------------------------------------ 

Les deux premiers sont Seuls les changements de prop (mergeinfo, ignore, etc), alors que le 3ème élément est une édition de contenu réel et c'est l'élément réel que je veux saisir pour éviter d'exporter la racine entière partout.

Y at-il moyen d'obtenir/filtrer uniquement les changements de contenu à partir du journal svn ou d'une autre commande.

Répondre

0

Est-ce que cela fonctionne?

svn log --xml --with-no-revprops 
+0

Non, ce n'est pas le cas. cela n'affecte que les propriétés de "révision" – jeroenh

+0

Mon serveur svn est la version 1.5.1 et --with-no-revprops n'est pas disponible sur svn-log cmd. Est-ce une fonctionnalité plus récente? Temps pour mettre à jour mon repo? – Dan

+0

@Dan: oui, c'est une nouvelle fonctionnalité de 1.6 – jeroenh

1

Je pense que le seul moyen est d'analyser réellement la sortie de diff pour chaque revistion, bien que cela semble plutôt fragile, et probablement très lent ...

Ce à quoi ressemble une entrée de diff pour un fichier avec uniquement les propriétés modifiées:

c:\test\wc>svn diff -c 3 

Property changes on: test.txt 
___________________________________________________________________ 
Added: test 
    + test 

Voici comment une entrée de diff recherche un fichier avec contenu a été modifié et les propriétés ont changé:

c:\test\wc>svn diff -c 4 
Index: test.txt 
=================================================================== 
--- test.txt (revision 3) 
+++ test.txt (revision 4) 
@@ -1 +1,2 @@ 

+asdfads 

Property changes on: test.txt 
___________________________________________________________________ 
Added: someproperty 
    + somepropertyvalue 
+0

Yeh, était en quelque sorte d'éviter cette réponse, car la sortie semble malpropre et peut-être pas fiable. Bien que ce soit probablement la seule option à moins que quelqu'un d'autre ait quelques idées. En supposant que la chaîne 'Index: ' apparaît toujours quand il y a un changement de contenu, alors je suppose qu'il y a une certaine possibilité d'analyse. Hmm, merci pour l'entrée. – Dan

4

Voici un script que je viens d'écrire pour obtenir un journal détaillé de toutes les révisions dans lesquelles la propriété change à l'intérieur du répertoire svn actuel où c'est fait. Placez juste la bonne version de début et de fin où vous devinez le changement de propriété s'est produit. Ce n'est pas très rapide, mais ça fonctionne.

#!/bin/bash 
# Show the verbose log of the revisions, where svn properties 
# inside the current folder where added/removed 
startrev=4600 
endrev=4620 
for i in $(eval echo {$startrev..$endrev}) 
    do 
    svn diff -c $i 2>/dev/null | grep "Property changes on" 1>/dev/null 
    if [ $? == 0 ]; then 
     echo "Property change in revision $i:" 
     svn log -r $i --verbose 
    fi 
done 
+0

Ceci est très utile, mais il ne semble pas fonctionner (pour moi). J'utilise le client cygwin svn et ai mis le startrev à la révision je savais qu'il y avait des changements de propriété, et endrev au numéro de révision suivant. Il n'y a pas de sortie à sortir et 'echo $? 'Donne 0. – andersand

+0

Oh, il semblerait que je n'aie pas (bien sûr) de paramètres régionaux différents sur mon client svn. Cela explique pourquoi le grep ne trouve rien ^^ – andersand

1

Je sais que cette question a été répondu, mais au cas où quelqu'un voudrait un petit guide que je l'ai fait ce post sur how to get get queryable data from svn log/diff (y compris les scripts bash, xslt et les scripts de base de données Oracle). Cela vous permet d'exécuter toutes sortes de requêtes utiles sur la vue v_svnlog

fichiers « chaud » dans ce patch:

select path, count(*) num from v_svnlog 
group by path 
order by num desc, path asc 

la plupart des tests par auteur

select author, count(*) num from v_svnlog 
where path like '%Test%' 
group by author 
order by num desc 

et ainsi de suite ..

Questions connexes