Benötigt: Perl
URL: URL: http://www.red-bean.com/~kfogel/cvs2cl.shtml
Das Programm cvs2cl.pl dient zur Verdichtung und Umformatierung der
Ausgabe von cvs log, damit daraus eine ChangeLog-Datei im GNU-Stil
erzeugt werden kann. ChangeLogs sind chronologisch geordnete
Dokumente, welche die Veränderungen eines Projektes über die Zeit in
einem Format beinhalten, das speziell auf leichte Lesbarkeit durch den
Benutzer ausgerichtet ist (siehe untenstehende Beispiele).
Das Problem mit dem Befehl cvs log ist, dass er seine Ausgabe
dateiweise organisiert, ohne zu berücksichtigen, dass dieselbe
Log-Mitteilung, wenn sie fast im selben Moment in diversen Dateien
auftaucht, impliziert, dass alle betroffenen Dateien Bestandteil eines
einzigen Commit waren. Daher ist die Betrachtung der cvs log-Ausgabe
in der Absicht, einen Überblick über ein Projekt zu erhalten, von
vornherein zum Scheitern verurteilt - man kann nur den
Entwicklungshergang einzelner Dateien zuverlässig verfolgen.
In dem ChangeLog, das cvs2cl.pl produziert, werden identische
Log-Mitteilungen zusammengefasst, sodass ein commit, der mehrere
Dateien umfaßt, auch nur als einzelner Eintrag auftaucht. Zum
Beispiel:
user@linux ~$
cvs3cl.pl
cvs log: logging . cvs log: logging a-verzeichnis cvs log: logging a-verzeichnis/unterverzeichnis cvs log: logging b-verzeichnis
user@linux ~$
cat ChangeLog
... 1999-08-29 05:44 jrandom *README (1.6), hello.c (2.1), a-verzeichnis/irgendwas.c (2.1), a-verzeichnis/unterverzeichnis/fisch.c (2.1): Ich committe mit pcl-cvs 2.9, weil mir danach ist. 1999-08-23 22:48 jrandom *README (1.5): [no log message] 1999-08-22 19:34 jrandom *README (1.4): triviale Änderung ...
user@linux ~$
|
Der erste Eintrag zeigt, dass der Commit von vier Dateien auf einmal
mit der Log-Mitteilung: Ich committe mit pcl-cvs 2.9, weil mir danach
ist. vorgenommen wurde. (Die Option -r wurde benutzt, um die
Revisionsnummer jeder Datei mit dem Log-Eintrag anzuzeigen.)
Wie CVS selbst, nimmt auch cvs2cl.pl das aktuelle Verzeichnis als
implizites Argument, kann aber auch mit bestimmten Dateien arbeiten,
wenn diese auf der Kommandozeile angegeben werden. Es folgen einige
der am häufigsten benutzten Optionen.
-h, --help
Zeigt eine kurze Hilfe zur Benutzung des Programms an.
-r, --revisions
Listet Revisionsnummern in der Ausgabe mit auf (s.o.). In Verbindung
mit der Option -b werden Entwicklungszweige als ZWEIGNAME.N gelistet,
wobei N die Revision auf dem Zweig ist.
-t, --tags
Listet symbolische Namen bei allen Revisionen, die welche besitzen, mit auf.
-b, --branches
Listet den Namen des Entwicklungszweiges für alle Revisionen auf
diesem Zweig mit auf (siehe auch -r).
-g OPTIONEN, --global-opts OPTIONEN
Übergibt OPTIONEN als globale Argumente an cvs. Intern ruft cvs2cl.pl
cvs auf, um die unformatierten Log-Daten zu erhalten; dabei werden
OPTIONEN direkt hinter den cvs-Aufruf geschrieben. Um beispielsweise
eine Beschränkung auf wichtige Meldungen und Kompression zu erreichen,
kann man folgenden Aufruf verwenden:
user@linux ~$
cvs2cl.pl -g "-Q -z3"
|
-l OPTIONEN, --log-opts OPTIONEN
Wie -g, nur dass die OPTIONEN hier als Befehlsoptionen, nicht global,
übergeben werden. Um beispielsweise ein ChangeLog zu erzeugen, das nur
Commits zwischen dem 26. Juli und dem 15. August anzeigt, könnten
Sie folgenden Befehl verwenden:
user@linux ~$
cvs2cl.pl -l "'-d1999-07-26<1999-08-15'"
|
Beachten Sie die doppelten Anführungszeichen - diese sind in Unix
notwendig, da die Shell, die cvs log innerhalb von cvs2cl.pl aufruft,
das <-Zeichen sonst als Zeichen zur Eingabeumleitung interpretieren
würde. Daher müssen die Anführungszeichen als Teil des Arguments
übergeben werden, was eine zweite Schicht
von Anführungszeichen notwendig macht.
-d, --distributed
Schreibe ein eigenes ChangeLog in jedes Unterverzeichnis, das nur die
Commits in jenem Verzeichnis beinhaltet. (Im Gegensatz zur Erzeugung
eines einzigen ChangeLogs, welches das aktuelle Verzeichnis und alle
Unterverzeichnisse desselben beinhaltet.)
|