Wie für alle Nicht-Binär-Dateien in einem Zweig einen rekursive svn blame Bericht in einer XML-Datei zu bekommen?

StackOverflow https://stackoverflow.com/questions/413777

Frage

Wie kann ich einen voll rekursive svn blame Bericht für alle Nicht-Binär-Dateien in einem Zweig, in dem die Ausgabe in einer einzigen Datei im XML-Format und enthält Revision, Datum, Autor, Dateinamen und Pfad und den Text die Zeile der Datei selbst? Die gesamte Ausgabe muss in einer einzigen Datei sein. Es wird als Teil des Build über eine CCNet Instanz ausgeführt werden.

Verfügbare Tools sind die neueste stabile Version von Nant und NAntContrib, msbuild und letzte Befehlszeile svn.

Hier einige der Fragen, die ich in ausgeführt haben: Befehlszeile svn blame Befehl nicht unterstützt Verzeichnisrekursion. Blame die Option --xml enthält nicht den eigentlichen Text jeder Zeile, obwohl es alles andere hat. Standardmäßig wird NAntContrib Passieren den --quiet Parameters (im Gegensatz zu der Aufgabe reference), das nicht auf der Schuld Befehl unterstützt wird. NAntContrib svn Aufgabe, den --xml Parameter nicht akzeptieren kann.

War es hilfreich?

Lösung

Die einfache Antwort ist, dass es keine einfache Möglichkeit, dies zu tun. Der beste, richtige Weg wäre, um Ihren eigenen SVN-Client zu schreiben (oder die bestehenden verlängern), so dass es die Funktionalität, die Sie benötigen. Kaum trivial.

Es gibt auch einen falschen Weg, es zu tun, den Code beinhaltet auch das Schreiben. Tu das nicht :

find . -type f | grep -v .svn | xargs svn blame > line_data
find . -type f | grep -v .svn | xargs svn --xml blame > xml_data

Sie können Skript die beiden svn Befehle zusammen find zweimal zu vermeiden laufen, aber das wird noch quälend langsam sein. Um noch schlimmer zu machen, werden Sie dann analysieren müssen die beiden Dateien selbst die eigentlichen Source-Leitungen in die XML-Daten hinzuzufügen.

Leider denke ich, das das Ausmaß der Unterstützung für das, was Sie mit dem Standard-SVN-Client wollen, und ich kann alle anderen Kunden nicht finden, dass die Dinge besser machen (einige nicht einmal unterstützen blame).

Andere Tipps

Ich weiß nicht, was OS Sie verwenden. Aber man kann versuchen, eine einfache for-Schleife und dem Befehl „Svn ls -R“ rekursiv alle Dateien in Ihrer Branche Liste (Arbeitsbereich / url) und dann eine Pipe an „Svn Schuld --xml“.

Ich habe dies in meinem SVN Kommandozeile ausprobiert und es funktioniert gut (Windows XP, SVN 1.4.4). Der Befehl, den ich verwenden, ist wie folgt:

FOR / F "usebackq delims ==" % i IN (svn ls -R http://myurl/mybranch) DO @svn Schuld --xml% i

Hinweis: Sie können einige vermeiden „url nicht gefunden“ Art von Fehler, wenn Sie diesen Befehl eingeben in einem Arbeitsbereich (Ihre Branche Wurzel widerspiegelt) und verwenden Sie die ‚Svn ls -r` anstelle der URL in dem obigen Befehl.

Hope, das hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top