2009-08-04 6 views
19

Qual è il modo più semplice per determinare quando una proprietà è stata impostata su un file o una cartella? Fondamentalmente, sto cercando un equivalente di "svn blame" che funzioni sulle proprietà.Come si ottiene la cronologia di una proprietà di file/cartella in SVN?

Il sottocomando registro permette di ottenere la storia completa di un file o una cartella, anche quando le proprietà sono state modificate. Tuttavia, non fa distinzione tra una modifica della proprietà e altri tipi di modifica, il che ovviamente significa anche che non ti dirà nulla sulla storia di una particolare proprietà.

Il comando status distingue tra proprietà e di altri tipi di modifiche, ma funziona solo sulla copia di lavoro.

Biasimo, in sé, supporta solo file, non le directory, e funziona sui contenuti, non le proprietà.

Idee?

risposta

8

Il meglio che posso pensare è scrivere un piccolo script o un'app che usa il comando svn propget per scaricare il valore della proprietà corrente su un file di testo, e poi torna indietro attraverso le revisioni scaricando la proprietà in un altro file di testo e confrontando i due. Non appena rileva una modifica, stampa il numero di revisione (in realtà il numero di revisione successivo che ha apportato la modifica) insieme all'utente che l'ha commesso.

Ecco un esempio di comando per eseguire il dump svn: ignore per la directory dizionario a revisione 80:

svn propget -r 80 svn:ignore dictionary 
+0

ho intenzione di prendere la mancanza di opzioni migliori come la risposta che non c'è modo pronto a fare questo. Ah bene. –

+0

Il bello di questo è la persona che ha commesso quella revisione non è necessariamente la persona che ha cambiato la proprietà. –

+0

Non capisco, @anonfunc, come potrebbe qualcun altro cambiare la proprietà? Penso che la prima revisione che contiene il nuovo valore della proprietà sia sempre la revisione che ha commesso la modifica. –

1
#!/bin/bash 
# This is not a great solution, but it works for gathering the data 

CURRENT_REVISION=95300 
OLDEST_REVISION=93000 
URL="file:///home/svn/repo/project/dir/target.c" 
PROPERTY_NAME="svn:externals" 

for i in `seq $OLDEST_REVISION $CURRENT_REVISION` 
do 
    svn -r$i propget "$PROPERTY_NAME" "$URL" | sed -e "s/^/$i\t/" 
done 
7

Un modo per ottenere un elenco di quando le proprietà per una determinata cartella è cambiato è:

svn log -v . |grep " M /trunk/datacenter$" -B2 

che dà il seguente risultato:

r963 | someuser | 2013-08-26 20:32:37 +0200 (Mon, 26 Aug 2013) | 4 lines 
Changed paths: 
    M /trunk/datacenter 
-- 
r908 | someotheruser | 2013-08-15 12:15:03 +0200 (Thu, 15 Aug 2013) | 1 line 
Changed paths: 
    M /trunk/datacenter 
-- 
r413 | someuser | 2013-04-26 09:02:08 +0200 (Fri, 26 Apr 2013) | 1 line 
Changed paths: 
    M /trunk/datacenter 

Poi si può guardare a ogni revisione per vedere cosa è cambiato:

$ svn diff -c963 

in fondo:

... 

Property changes on: . 
___________________________________________________________________ 
Modified: svn:ignore 
## -22,3 +22,5 ## 

.idea 
.classpath 
+ 
+dev-config.groovy 

Contro:

  • Non c'è modo di specificare quali proprietà siete interessati a
  • noioso

Nota: non è sicuro -B2 è sufficiente in tutti i casi, come la linea "M/trunk/datacenter" potrebbe non essere la prima linea

+0

La migliore risposta, ha svalutato questo molto tempo fa. Difficile credere che Subversion non fornisca un modo nativo di filtrare il log per questo tipo di dettagli. – javabrett

0

mio svn-extensions toolbox ha ora svn-prop-annotate e (come una specializzazione) svn-mergeinfo-annotate comandi. Hanno scarso rendimento (perché corrono svn log e svn diff per ogni potenziale cambiamento), e possono avere ancora alcune dipendenze e perculiarities al mio stile particolare di lavoro, ma provare se siete abbastanza disperato.

Ecco alcuni esempio di output:

$ svn-mergeinfo-annotate --author karkat -l 5 
67645 ingo.karka Merged /branches/1.50/foobar:r67488 
67423 ingo.karka Merged /branches/1.50/foobar:r67315,67331 
67339 ingo.karka Merged /branches/1.50/foobar:r67279 
53320 ingo.karka Merged /branches/foo-1.01:r53317