Moin, ich versuche gerade ein automatisches Kommandozeilen-Bauskript für ein Patch-Paket zu bauen. Für die Executable ist das soweit relativ einfach. Die kompletten Sourcen updaten, kompilieren, ab ins ZIP. Für alle anderen Dateien (Grafiken, Übersetzungen, etc.) ist das nun komplizierter. Im Prinzip bräuchte ich einen Befehl, mit dem ich an alle Dateien komme, die sich seit einer Revision geändert haben. Nur wie schaffe ich das?
Eventuell über svn diff? http://svnbook.red-bean.com/en/1.0/re09.html Etwas Skriptmagic wird wohl trotzdem nötig sein.
Hilft mir noch nicht wirklich weiter. Da die Ausgabe von Diff erst ziemlich umständlich geparsed werden müsste, um daraus ne Dateiliste zu machen, die ich an irgendeinen weiteren Befehl weiter reichen kann.
Ich brauche ja nicht nur ein Log, was sich geändert hat. Sondern ich brauche am Ende ein Verzeichnis, in dem sich alle Dateien befinden, die im Repository seit dem letzten Release geändert wurden.
Okay dann habe ich das falsch Verstanden, ich fürchte so einen Befehl gibt es nicht, für solche Spezialwünsche schreibe ich mir immer ein Programm welches die Ausgabe von svnlog (http://svnbook.red-bean.com/en/1.0/re15.html) als XML parst und arbeite dann darauf.
Fürs umständliche Parsen der diff-Ausgabe gibt es schon fertig diffstat. Mit der Option -l werden nur die Dateinamen gelistet. Weiß aber nicht, wie das bei Binärdateien, die nicht komplett im diff auftauchen, aussieht. Eventuell macht "svn diff --summarize" auch schon das gewünschte, kann es mangels aktivem SVN Repository auf meiner Platte grad nicht testen.
Sieh dir mal die Ausgabe von "svn log -v" an.
Klaus schrieb: > Hilft mir noch nicht wirklich weiter. Da die Ausgabe von Diff erst > ziemlich umständlich geparsed werden müsste, um daraus ne Dateiliste zu > machen, die ich an irgendeinen weiteren Befehl weiter reichen kann. Wieso brauchst du denn eine Dateiliste? Die Ausgabe von diff beinhaltet doch schon alles, oder willst du was anderes?
Rolf Magnus schrieb: > Die Ausgabe von diff beinhaltet > doch schon alles, oder willst du was anderes? Ich hab's auch nicht so ganz verstanden, aber anscheinend will er eine Art Delta zur letzten Lieferung erstellen, welche nur geänderte Dateien enthält.
Rolf Magnus schrieb: > Wieso brauchst du denn eine Dateiliste? Die Ausgabe von diff beinhaltet > doch schon alles, oder willst du was anderes? Das Problem ist ja, dass ich nicht nur eine Ausgabe brauche, sondern physikalisch alle geänderten Dateien in meinem ZIP haben möchte. Im Moment baue ich dieses ZIP per Hand, in dem ich die Ausgabe von svn log anschaue und die Dateien reinkopiere. Ich hätte das halt ganz gerne automatisiert.
mkdir [Verzeichnis] svn log -v \ | [Filter_für_geänderte_Dateien] \ | sed [Extraktion_des_relativen_Pfad/Dateinamens] \ | sort -u \ | cpio -dump [Verzeichnis]
Klaus schrieb: > Rolf Magnus schrieb: >> Wieso brauchst du denn eine Dateiliste? Die Ausgabe von diff beinhaltet >> doch schon alles, oder willst du was anderes? > > Das Problem ist ja, dass ich nicht nur eine Ausgabe brauche, sondern > physikalisch alle geänderten Dateien in meinem ZIP haben möchte. Das diff ist nicht nur eine Ausgabe, sondern enthält alle Änderungen, die gemacht wurden. Wenn du das, was da rauskommt, an das Programm 'patch' übergibst und dabei in einem Verzeichnis bist, wo die alten Sourcen liegen, tut es gena das, was du willst: Es macht aus den alten Sourcen die neuen. Dabei ist halt nicht jede Datei komplett in einem Archiv enthalten, sondern nur eine Liste der Unterschiede, aber das reicht ja, um aus der alten Datei die neue zu machen.
Nur so am Rande: Wie willst du Dateien handhaben die umbenannt oder entfernt wurden? Eine "Antidatei" die eine bestehende Datei restlos entfernt gibt es ja leider nicht. Gruß Reinhard
Oh, jetzt erkenne ich, welche Information ich vergessen habe: Es geht mir um Binärdateien, das heißt eine Diffausgabe hilft mir da also wirklich nicht.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.