2010-02-08 9 views
11

Tło: napisanie skryptu automatycznego wydania, aby wyeksportować zmienione pliki między wersjami z SVN i przesłać na zdalny serwer.jak wykryć zmodyfikowane właściwości za pomocą dziennika SVN

Komenda svn log pokazuje zmodyfikowane pliki o właściwościach i, ale wydaje się nie rozróżniać pełnych wyników między modyfikacją treści a modyfikacjami właściwości.

jestem czytając to wyjście źle, czy jest tam łatwy sposób uzyskać listę zmienionych plików między wersjami pomijając rekwizyt zmienia

Oto moje przykładowe 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 
------------------------------------------------------------------------ 

Górne dwa są tylko zmiany w rekwizytach (mergeinfo, ignores itp.), podczas gdy trzeci element jest rzeczywistą edycją treści i jest to prawdziwy przedmiot, który chcę pobrać, aby uniknąć eksportu całego roota.

Czy mimo to można uzyskać/odfiltrować tylko zmiany zawartości z dziennika svn lub innego polecenia.

Odpowiedz

0

Czy to działa?

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

nie, nie. ma to wpływ tylko na właściwości "rewizji". – jeroenh

+0

Mój serwer svn jest w wersji 1.5.1 , a --with-no-revprops nie jest dostępny na svn-log cmd. Czy to nowsza funkcja? Czas na uaktualnienie mojego repo? – Dan

+0

@Dan: tak, jest to nowa funkcja w 1.6 – jeroenh

1

Myślę, że jedynym sposobem jest właściwie analizować dane wyjściowe diff dla każdego revistion, mimo że wydaje się raczej krucha i zapewne bardzo powolny ...

To jest jak wejście diff szuka pliku z tylko zmienionych właściwościach:

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

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

to jest jak wejście diff szuka pliku z zawartością i zmienił zmienionych właściwościach:

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, był pewien sposób uniknięcia tej odpowiedzi, ponieważ wynik wydaje się brudny i prawdopodobnie niewiarygodne. Chociaż jest to prawdopodobnie jedyna opcja, chyba że ktoś inny ma jakieś pomysły. Zakładając, że ciąg "Index: " zawsze pojawia się, gdy występuje zmiana zawartości, to prawdopodobnie istnieje możliwość parsowania. Hmm, dziękuję za wejście. – Dan

4

Oto skrypt, który właśnie napisałem, aby uzyskać pełny dziennik wszystkich wersji, w których zmiany właściwości wewnątrz bieżącego katalogu svn, gdzie są wykonywane. Wystarczy umieścić odpowiednią wersję początkową i końcową, w której można się domyślić, że nastąpiło przeniesienie własności. Nie jest zbyt szybki, ale działa.

#!/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

Jest to bardzo przydatne, jednak nie wydaje się działać (dla mnie). Korzystam z klienta cygwin svn i ustawię startrev na wersję, o której wiedziałem, że nastąpiły zmiany właściwości i zakończ następną numer wersji. Brak wyjścia na standardowe wyjście i 'echo $?' Daje 0. – andersand

+0

Och, wydaje mi się (niechętnie) mieć inne ustawienia narodowe na moim kliencie svn. To wyjaśnia, dlaczego grep niczego nie znajduje ^^ – andersand

1

Wiem, że to pytanie zostało odebrane, ale w przypadku gdy ktoś chciałby trochę instrukcji zrobiłem tego posta o how to get get queryable data from svn log/diff (w tym skrypty bash, XSLT i skryptów bazy danych Oracle). Rozwiązanie to pozwala na uruchamianie wszystkich rodzajów przydatnych zapytań przeciwko widoku v_svnlog

„gorące” pliki w tej poprawki:

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

większość testów według autora

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

i tak dalej ..

Powiązane problemy