2016-11-22 2 views
-1

Wie erhalten SVN Revisionen, die ohne jira ticket# in den Kommentaren festgeschrieben sind?Ein Befehl holt SVN-Revisionen ohne Kommentare

------------------------------------------------------------------------ 
r1 | user2 | 2006-11-22 02:13:42 -0500 (Tue, 22 Nov 2006) | 1 line 
Changed paths: 
M /trunk/testfile.txt 

added new file 
------------------------------------------------------------------------ 
r2 | user 3 | 2006-11-22 02:08:37 -0500 (Tue, 22 Nov 2006) | 1 line 
Changed paths: 
M /trunk/testfile1.txt 

added new file 
------------------------------------------------------------------------ 
r3 | user 1| 2006-11-18 02:13:56 -0500 (Fri, 18 Nov 2006) | 1 line 
Changed paths: 
M /trunk/testfile5.txt 

Jira_issue-123 added new file 

gewünschte Ausgabe:

r1 
r2 
+1

Können Sie eine Beispieleingabe und die Ausgabe, die Sie sehen möchten, posten? – dood

+0

Bearbeitete die Frage jetzt. – iaav

Antwort

0

Parsen das Protokoll im XML-Format

Wenn Sie das Protokoll zuverlässig, verwenden Sie die --xml Option und ein Werkzeug, das XML analysieren möchten Parsing. Ich würde empfehlen xmlstarlet.

Zum Beispiel kann der folgende Befehl listet die Revisionsnummern:

svn log -q --xml | xmlstarlet sel -t -v '//logentry/@revision' 

Beispielausgabe

1771403 
1771252 
1771240 

Der XPath-Ausdruck wählt Werte von revision Attribute von allen (//) logentry Elemente in der Dokument.

Sie können die Nummern mit r Präfix wie folgt:

svn log -q --xml | xmlstarlet sel -T -t \ 
    -m '//logentry' -v 'concat("r", @revision)' -n 

Beispielausgabe

r1771403 
r1771252 
r1771240 

Der Befehl verkettet "r" mit den für alle logentry Elemente im Dokument revision Attributwerte xmlstarlet.

Wenn xmlstarlet nicht verfügbar ist

können Sie greifen etwas weniger zuverlässig Parsen der svn log -q Ausgabe mit Hilfe von grep, wenn Sie nicht xmlstarlet aus irgendeinem Grund installieren:

svn log -q | grep -o '^r[0-9]\+' 

Probenausgang

r1771403 
r1771252 
r1771240 

Das gleiche mit sed:

svn log -q | sed -e '/^[^r]/d; s/^\(r[0-9]\+\).*/\1/' 

Die erste sed Ausdruck löscht (d) die Linie, wenn es nicht das Muster übereinstimmen (wenn es keine r am Anfang der Zeile ist). Der zweite Ausdruck ersetzt die Zeile mit dem Teil, der dem Muster zwischen \( und \) entspricht.

Der reguläre Ausdruck entspricht r am Anfang der Zeile (^) gefolgt von einer oder mehreren Ziffern.Die Option -o weist grep an, nur übereinstimmende Teile zu drucken.