Frage

Ich mache ein PHP-Tool, das in einem Repository verbindet, lädt die Liste der Commits und speichert sie lokal. Um jedoch die Möglichkeit durch, dass bestimmte Repositories sind riesig und ihre Log-Ergebnisse in langen Wartezeit und mögliche Zeitüberschreitungen / Fehler Grabben, ich möchte jedem Commit herunterladen Nachricht Asynchron-Anfragen verwendet wird.

Also, ich habe ein Start- und Endpunkte in Revisionsgeschichte, und ich kann alle Protokolle wie diese greifen:

svn log -r <from_revision>:<to_revision> <REPO_URL>

... und ich werde möglicherweise mit einer XML-Datei am Ende, die so groß ist, dass es lange Zeit zum Download, lange Zeit und viele Ressourcen nehmen, und langer Zeit zu speichern, zu analysieren.

Wenn ich den Start- und den Endpunkt wissen, kann ich eine erstellen for () Schleife Revisionen greifen eins nach dem anderen:

svn log -r <revision> ...

Aber, da ich nicht weiß, welche spezifischen Revisionen für gegebenen Pfad vorhanden ist, werde ich eine Fehlermeldung. Ich kann den Antrag stellen, dass Fehler bei der Aktualisierung zu ignorieren, aber es ist ein gemeiner Hack und es wird Anfragen stellen und trotzdem für die Antworten warten -., Die überhaupt nicht gut ist

Also, ich brauche etwas wie folgt aus:

  • „Gib mir die Liste der Revisionsnummern für diesen Weg“, OR:
  • "Gib mir die Liste der Revisionsnummern für diesen Weg, zwischen und

So kann ich in der Lage wäre eine Reihe von gültigen Revisionen für den Repository-Pfad zu machen und sie eins nach dem anderen zu bekommen.

Alle Vorschläge sind willkommen, Dank im Voraus.

War es hilfreich?

Lösung

Ich denke, Ihre beste Wette wäre, die folgende svn log -l 100 0:{$newest} .\ zu tun, dass die ersten 100 Protokolle für ein bestimmtes Verzeichnis oder eine Datei abgerufen werden. dann lesen Sie die letzte Revisionsnummer zurück, dann die nächsten 100 svn log -l 100 {$last_ret_log}:{$newest} .\ anfordern

auf diese Weise erhalten Sie 99 neue Protokolleinträge mit jeder Anforderung, aber man wird nicht alle von ihnen bekommen.

Andere Tipps

Wenn Sie den Zugriff auf den Repository Baum auf dem Subversion-Server haben, dann können Sie svnlook history verwenden, um eine Liste der Versionsnummern zu erhalten.

//svnbook.red-bean:

Weitere Informationen finden Sie unter http finden .com / de / 1.1 / re49.html .

Ich habe gerade versucht, ein ähnliches Ergebnis zu erhalten. Ich möchte nur alle Revisionsnummern für eine bestimmte Branche.

Ich fand die folgenden recht hilfreich sein.

svn log <svn_server_path> | grep "^r[0-9]\+ | " | cut -d' ' -f1 | cut -c2- > revisions.csv

Das gibt mir eine Datei mit allen Revisionsnummern in separaten Zeilen.

Wir hoffen, Sie oder jemand anderes wird es hilfreich sein.

Unsere Repo hat mehr als 25.000 Revisionen und es dauert ein paar Sekunden, um diese Datei zu erzeugen.

Sie können bei svn list suchen. Also für Ihren Zweck:


$ svn list --verbose file:///var/svn/repos
     16 sally         28361 Jan 16 23:18 README.txt
     27 sally             0 Jan 18 15:27 INSTALL
     24 harry               Jan 18 11:27 examples/

Hier wird die letzte (Kopf) Revision jeder Datei.

svn log url -l limitNumber - r fromReversion:toReversion

, wenn U wollen die nächstälteren (kleinere) Reversion (Version) finden zum Beispiel

   svn log url -l 4 -r someVersion:1
 or
   svn log url -l 4 -r 99: 3

fromReversion größer als toReversion wenn U will die nächste neuere (größer) Reversion (version)

finden
  svn log url -l 4 -r someVersion:head
or   
  svn log url -l 4 -r 3:99
   fromReversion lower than toReversion
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top