2010-03-17 13 views
16

Czy istnieje sposób uzyskania ładnej listy wszystkich wiadomości zatwierdzonych posortowanych według pliku? Coś jak to (jak widać, nie chcę komunikaty specyficzne dla określonego pliku, po prostu pokazać wiadomości dla całego popełnić jeśli plik był częścią popełnić powtarza ok):SVN - Uzyskaj wszystkie komunikaty o zatwierdzeniu dla pliku?

-- index.php 
    2010-01-02 03:04:05 
     * added new paragraph 
    2010-01-01 03:04:05 
     * moved header out of index.php into header.php 
     * header.php initial check-in 
    2009-12-31 03:04:05 
     * index.php initial check-in 

-- header.php 
    2010-01-03 03:04:05 
     * added new meta tags 
    2010-01-01 03:04:05 
     * moved header out of index.php into header.php 
     * header.php initial check-in 

dodatkowe informacje:

svn log filename robi coś podobnego, ale chcę, aby to zrobić:

  1. uzyskać listę plików, które uległy zmianie między rrrr-mm-dd (r2) i rrrr-mm-dd (r4) (tj.
    svn log -q -v -r 2:4 > changedfiles.txt
  2. pas obcego bzdura z changedfiles.txt
  3. svn log każdy plik w tym wykazie, tak jak w:
    svn log < changedfiles.txt >> combinedlog.txt
    (tylko pseudokod, wiem svn log bierze argumenty nie wejście, ale nie może być jedno, aby napisać to)

Odpowiedz

14

svn log filename pokaże wszystko popełnić wiadomości związane z filename. Wyjście będzie wyglądać mniej więcej tak:

------------------------------------------------------------------------ 
r1206 | kalebp | 2010-03-10 16:48:12 -0800 (Wed, 10 Mar 2010) | 1 line 

Introduce a TranslatorFacade. Make the jar runnable by default. 
------------------------------------------------------------------------ 
r1085 | kalebp | 2010-03-02 17:10:28 -0800 (Wed, 04 Nov 2009) | 1 line 

Annotation checker now supports complete definitions and named parameters 
------------------------------------------------------------------------ 
... 

Jeśli nie chcesz informacji przed oddziału lub kopiowanie jest opcja --stop-on-copy, które można dodać. Zobacz svn help log uzyskać więcej informacji, takich jak sposób określić zakresy dat itp

EDIT:

można łatwo chwycić przez zakres dat, stosując svn log -r{20100101}:{20100331}. Nie podoba mi się pomysł wywoływania dziennika dla zmienionych plików, więc polecam użycie flagi -v, aby uzyskać listę plików, które zmieniły się w zatwierdzeniu.

Oto proces, który używam:

svn log -r{20100101}:{20100331} -v --xml | xsltproc formatter.xsl - 

A oto formatter.xsl:

<xsl:stylesheet 
     xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
     xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
     exclude-result-prefixes="xsd" 
     version="1.0" 
     > 

<xsl:output method="text" indent="no" /> 

<xsl:key name="paths-key" match="/log/logentry/paths" use="path" /> 

<xsl:template match="log/logentry"> 
     <xsl:for-each select="paths/path[count(. | key('paths-key', paths/path)[1]) = 1]"> 
       <xsl:sort select="text()"/> 
       -- <xsl:value-of select="text()" /> 
       <xsl:for-each select="key('paths-key', .)/preceding-sibling::date"> 
         <xsl:sort select="translate(text(), '-:.T','')"/> 
         <xsl:variable name="selectedDate" select="text()"/> 
         <xsl:value-of select="translate($selectedDate, 'T', ' ')"/><xsl:text> 
         </xsl:text> 
         <xsl:for-each select="following-sibling::msg"> 
           * <xsl:variable name="msg" select="text()"/> 
           <xsl:variable name="date" select="preceding-sibling::date/text()"/> 
           <xsl:if test="$selectedDate = $date"> 
             <xsl:text> </xsl:text> 
             <xsl:value-of select="$msg"/> 
           </xsl:if> 
         </xsl:for-each> 
       </xsl:for-each> 
     </xsl:for-each> 
</xsl:template> 

</xsl:stylesheet> 
+0

wystarczająco blisko, modyfikuję twój xslt. dziękuję – davidosomething

1

z polecenia svn log

+0

Musiałbym skryptować i parsować go (lista svn pobiera wszystko, nie chcę tego), aby uzyskać listę zmienionych plików >> changedfiles.txt, a następnie uruchomić svn zalogować się na zawartość pliku changedfiles.txt w celu aby uzyskać listę taką, jaką chciałem. Chcę wiedzieć, czy jest lepszy sposób. – davidosomething

+0

Można również wykonać polecenie svn log -v, aby uzyskać pełne dzienniki i zogniskować komentarze dla pliku. – Sjoerd

1

Prawdopodobnie trzeba czegoś więcej niż tylko SVN do osiągnięcia tego programowo. Jeśli .Net nie stanowi problemu, polecam SharpSVn. Poniższy kod powinien nieco Cię uruchomić.

var la = new SvnLogArgs { Start = 16077, End = 17445 }; 
Collection<SvnLogEventArgs> list; 
client.GetLog(new Uri(_respositoryPath), la, out list); 

foreach (SvnLogEventArgs a in list) 
{ 
    // ...jazz 
} 
3

Wyobrażam svn log --xml i jakieś wiersza polecenia XPath czy XSLT będzie najlepszym.

+0

XPath służy do uzyskiwania dostępu do węzłów, ale XSLT to dobry pomysł, więc uwzględniłem takie rozwiązanie w moim poście. XQuery również by działał. :). –

Powiązane problemy