2016-07-25 7 views
0

TL; DR Wenn ich eine URL zu einem SVN Repo habe, wie kann ich alle Pfade zu den Dateien subtrahieren, die seit einer bestimmten Revisionsnummer geändert wurden?SVN/PySVN: Pfad zu den zuletzt geänderten Dateien abrufen

Lange Geschichte: Ich habe ein Skript, das einige Dateien von einem SVN Repo herunterlädt. Es tut es alle 'n Stunden. Aber wenn ich nur eine Datei geändert habe, muss ich nicht noch einmal alles neu herunterladen, nur diese Datei. Ich habe versucht, jede Datei mit PySVN zu überprüfen, um zu sehen, ob die Revisionsnummer geändert wurde, aber es dauert zu lange (für einen Ordner mit 6 Dateien dauert es ~ 20 Sekunden). Gibt es eine Möglichkeit, das zu verbessern?

Ich arbeite in Python mit PySVN. Ich habe gesehen, dass pysvn.Client.log Attribut 'changed_paths' hat, aber es scheint, dass ich nicht weiß, wie man damit umgeht: \ Dieses Programm läuft sowohl auf Linux als auch auf Windows, so dass die Lösung plattformübergreifend sein muss möglich)

Antwort

1

Verwenden Sie pysvn.Client(). Log(), um alle Änderungen zu finden. Zum Beispiel:

all_logs = pysvn.Client().log(path, 
    revision_start=pysvn.Revision(opt_revision_kind.head), 
    revision_end=pysvn.Revision(opt_revision_kind.number, last_revision), 
    discover_changed_paths=True) 

Dies wird immer mindestens ein Protokoll für die last_revision zurückgeben. Sie können dies entweder ignorieren oder last_revision + 1 verwenden und den Fehler von svn über fehlende Revision abfangen.

pysvn.Client(). Update() wird der intelligenteste Weg, um Änderungen in Ihre Arbeitskopie zu bekommen.

Denken Sie daran, dass Sie nur einen Teil des gesamten Repos auschecken können, indem Sie auswählen, mit welchem ​​Ordner Sie beginnen möchten, und dann die Tiefenfunktion verwenden, um nur den benötigten Ordner zu erhalten. Zum Beispiel:

pysvn.Client().checkout(URL, path, depth=pysvn.depth.files) 

Dann brauchen Sie nur Update() zu verwenden, aktualisiert, um die Dateien zu halten.

Barry Scott Autor von Pysvn.

+0

Können Sie erklären, was 'pysvn.Revision (opt_revision_kind.head)' und 'pysvn.Revision (opt_revision_kind.number, last_revision)' 'sind? Ich entdeckte auch pysvn.Client(). Diff, aber ich weiß nicht, was 'peg_revision' ist und/oder wie man es benutzt. – SnuKies

+0

@hadarS Bitte lesen Sie die Dokumentation. Sie sollten alles finden, was Sie in den ref docs benötigen. http://pysvn.stage.tigris.org/docs/pysvn_prog_ref.html Außerdem können Sie Fehlerberichte gegen pysvn einreichen, um die Dokumente auf pysvn.tigris.org zu verbessern, wenn fehlende/unvollständige Dokumentation vorhanden ist. –

+0

@hadarS Oh, und wenn es SVN-Begriffe gibt, die Sie nicht erkennen, ist es, wo Sie im SVN-Handbuch nach einer Definition suchen. pysvn ist ein Wrapper um svn und spiegelt die svn-Terminologie wider. –

0

Die Zusammenfassung lässt mich denken, dass Sie versuchen, ein Fahrrad neu zu erfinden. Testen und aktualisieren Sie eine Arbeitskopie, anstatt die Daten zu exportieren. Das ist die Aufgabe der Arbeitskopie und des Update-Befehls.

BTW, ich würde lieber die official SWIG Python bindings anstelle von PySVN verwenden.

Verwandte Themen