SelfLinux Programmierung CVS Werkzeuge von Drittanbietern, die mit CVS zusammen arbeiten Abschnitt 2 | SelfLinux-0.13.0

| Werkzeuge von Drittanbietern, die mit CVS zusammen arbeiten | Autor Formatierung GPL

#### 2 pcl-cvs: eine Emacs-Bedienungsoberfläche für CVS

Benötigt: Emacs, Elib

URLS:

> ftp://rum.cs.yale.edu/pub/monnier/pcl-cvs/

Autoren: Per Cederqvist und Stefan Monnier (derzeitige Betreuung)

Pcl-cvs ist eine von zwei Emacs/CVS-Bedienungsoberflächen. Die andere ist die native VC-(Version Control-)Oberfläche, die in Emacs eingebaut ist. Ich bevorzuge pcl-cvs, weil es speziell für CVS geschrieben wurde und daher sehr angenehm mit der Art harmoniert, in der CVS arbeitet. VC andererseits wurde entwickelt, um mit mehreren unterschiedlichen Versionskontrollsystemen zusammenzuarbeiten - RCS und SCCS genau wie CVS -, und ist daher nicht wirklich optimal auf CVS abgestimmt. Zum Beispiel präsentiert VC eine dateibasierte anstatt einer verzeichnisbasierten Oberfläche zur Revisionskontrolle.

Die Vorteile von pcl-cvs wiegen stark genug, um viele Benutzer zum Download und zur Installation zu bewegen, anstatt VC zu benutzen. Unglücklicherweise hat pcl-cvs zwei Nachteile: Es kann etwas problematisch in der Installation sein (ein Großteil dieses Abschnitts befasst sich mit möglichen Installationshürden), und seine neuen Versionen laufen etwas instabil.

Das letzte Problem ist wahrscheinlich eher temporärer Natur, es stellt sich jedoch die Frage, welche Version zu benutzen ist. Stefan Monnier hat erst kürzlich die Betreuung des pcl-cvs übernommen; die neueste Version, 2.9.6 (erhältlich vom ersten URL in der obigen Liste), lief ein bisschen holprig, als ich sie ausprobierte. Zweifellos werden die Probleme binnen kurzem ausgebügelt sein, aber in der Zwischenzeit möchten Sie möglicherweise eine etwas ältere Version benutzen. Da ich Version 1.0.5 lange Zeit täglich benutzt habe, wobei sie sich sehr gut verhielt, werde ich diese Version hier dokumentieren. Glücklicherweise ändert sich an der Installation von Version zu Version nicht allzu viel. Falls Sie sich also dazu entschließen, pcl-cvs zu benutzen, so schlage ich vor, dass Sie auf Stefan Monniers Seite nach einer neueren Version als 2.9.6 schauen; falls es eine gibt, versuchen Sie die, bevor Sie ganz auf 1.0.5 zurückgehen.

Sie werden feststellen, dass ich zwei URLs für Version 1.0.5 angegeben habe. Die erste ist Per Cederqvists Site, wo er ein Archiv alter pcl-cvs-Versionen unterhält. Da ich nicht sicher bin, wie lange dieses Archiv noch Bestand haben wird, mache ich außerdem die Version 1.05 auf ftp.red-bean.com verfügbar.

Obwohl der Rest dieser Anweisungen Beispiele aus einer 1.05-Distribution verwendet, sollten diese ebenfalls problemlos auf neuere Versionen anwendbar sein.

#### 3 Installation von pcl-cvs

Falls Sie sich normalerweise nicht mit Problemen der Emacs-Installation und -Instandhaltung beschäftigen, könnte Ihnen die pcl-cvs-Installationsprozedur etwas entmutigend erscheinen. Ein paar Hintergrundinformationen zur Arbeitsweise von Emacs hilft dem vielleicht etwas ab.

Die meisten abstrakteren Funktionen von Emacs sind in einer Programmiersprache namens Emacs Lisp geschrieben (Emacs selbst ist praktisch ein Interpreter für diese Programmiersprache). Die Leute fügen Emacs neue Funktionen hinzu, indem sie Dateien mit Emacs Lisp-Programmcode verbreiten. Pcl-cvs ist in dieser Programmiersprache geschrieben und benötigt eine Sammlung (Bibliothek) nützlicher allgemeiner Emacs Lisp-Funktionen namens Elib (auch von Per Cederqvist geschrieben, wird aber nicht zusammen mit pcl-cvs verbreitet), um zu funktionieren.

Elib ist in der normalen Emacs-Distribution nicht enthalten (zumindest nicht im FSF Emacs; bei XEmacs weiß ich es nicht), sodass Sie Elib zunächst selber herunterladen und installieren müssen, bevor Sie pcl-cvs nutzen können. Sie können es von ftp://ftp.lysator.liu.se/pub/emacs/elib-1.0.tar.gz bekommen. Installationsanweisungen sind in dem Archiv enthalten.

Wenn Elib installiert ist, sind Sie in der Lage, pcl-cvs einzurichten. Die folgenden Anweisungen sind gleichermaßen für Version 1.05 und 2.x gültig (auch wenn Sie in den NEWS- und INSTALL-Dateien in neuen Distributionen nachschauen sollten, ob sich etwas geändert hat).

Entpacken Sie zunächst pcl-cvs. (Ich benutze Version 1.05, es könnte aber genauso gut 2.9.6 sein.)

user@linux ~$ zcat pcl-cvs-1.05.tar.gz | tar xvf - pcl-cvs-1.05/ pcl-cvs-1.05/README pcl-cvs-1.05/NEWS pcl-cvs-1.05/INSTALL pcl-cvs-1.05/ChangeLog pcl-cvs-1.05/pcl-cvs.el pcl-cvs-1.05/pcl-cvs.texinfo pcl-cvs-1.05/compile-all.el pcl-cvs-1.05/pcl-cvs-lucid.el pcl-cvs-1.05/pcl-cvs-startup.el pcl-cvs-1.05/pcl-cvs.info pcl-cvs-1.05/Makefile pcl-cvs-1.05/texinfo.tex

und gehen Sie dann in das Hauptverzeichnis des Quelltextes:

user@linux ~$ cd pcl-cvs-1.05/

In diesem Verzeichnis ist ein Makefile. Entsprechend der Anweisungen in der INSTALL-Datei müssen Sie nun einige Dateipfade am Anfang des Makefile anpassen und dann eingeben:

user@linux ~$ make install

Wenn das funktioniert, toll! Allerdings gibt es manchmal auch eine Fehlermeldung. (Der pcl-cvs-Programmcode ist sehr portabel, die Installationsprozeduren sind es aber manchmal nicht!) Machen Sie Solgendes, wenn Sie eine Fehlermeldung erhalten:

user@linux ~$ make clean user@linux ~$ make

Wenn bis dahin alles gut geht, dann haben diese beiden Kommandos einen beträchtlichen Teil der Installation bereits erledigt, indem sie alle nötigen Emacs Lisp-Dateien byte-kompiliert haben. (Byte-Compiling verwandelt eine Datei mit lesbarem Emacs Lisp-Programmcode - eine .el-Datei - in eine kompaktere und effizientere Repräsentation - eine .elc-Datei. Emacs kann .elc-Dateien effizienter laden und ausführen als .el-Dateien.)

Ich fahre nun fort, in der Annahme, dass das mit dem Byte-Compiling geklappt hat. Sollte das nicht der Fall sein, keine Panik: Die .elc-Dateien sind ein Luxus, keine Notwendigkeit. Sie verbessern die Leistung ein wenig, aber pcl-cvs kann problemlos mit den normalen .el-Dateien laufen.

Falls das make install fehlgeschlagen ist, ist der nächste Schritt der, die Emacs Lisp-Dateien (.elc oder .el) in ein Verzeichnis zu packen, aus dem Emacs sie automatisch laden kann. Emacs hat ein spezielles Verzeichnis auf Ihrem System für solche lokal installierten Lisp-Dateien. Um dieses Verzeichnis zu finden - es enthält eine Datei namens default.el -, suchen Sie an den folgenden Orten in dieser Reihenfolge:

- /usr/share/emacs/site/lisp/
- /usr/local/share/emacs/site-lisp/
- /usr/lib/emacs/site-lisp/
- /usr/local/lib/emacs/site-lisp/

Wenn Sie Ihr site-lisp-Verzeichnis gefunden haben, kopieren Sie alle Lisp-Dateien dort hinein (dafür müssen Sie möglicherweise Superuser (root) sein):

user@linux ~$ cp -f *.el *.elc /usr/share/emacs/site-lisp/

Im letzten Schritt muss nun Emacs mitgeteilt werden, wo sich die Eintrittspunkte zu den pcl-cvs-Funktionen befinden (wobei der Haupteintrittspunkt cvs-update ist), sodass Emacs weiß, wie es bei Bedarf den pcl-cvs-Code laden muss. Da Emacs grundsätzlich die Datei default.el liest, wenn er startet, müssen dort die Eintrittspunkte aufgelistet werden.

Glücklicherweise liegt bei pcl-cvs die für default.el notwendige Liste schon bei. Kopieren Sie also einfach den Inhalt von pcl-cvs-startup.el in die Datei default.el hinein (oder in Ihre .emacs-Datei, falls Sie die Installation nur für sich selbst vornehmen), und starten Sie Ihren Emacs neu.

Am besten kopieren Sie auch die .info-Dateien in Ihr Info-Verzeichnis, und fügen Sie pcl-cvs dem Inhaltsverzeichnis in der Datei dir hinzu.

#### 4 Benutzung von pcl-cvs

Wenn es erst einmal installiert ist, ist pcl-cvs ganz einfach zu benutzen. Sie starten einfach die Funktion cvs-update, und pcl-cvs erzeugt eine Liste mit den Dateien, die in Ihrer Arbeitskopie verändert oder aktualisiert wurden. Von dieser Liste aus können Sie dann Commits durchführen, diffs machen und so weiter.

Da cvs-update der Haupteintrittspunkt ist, schlage ich vor, dass Sie ihn an eine einfach zu merkende Tastenkombination binden, bevor Sie weitermachen. Ich habe ihn in meiner .emacs-Datei an die Tastenkombination `Ctrl+``c` `v` gebunden:

> (global-set-key "\C-cv" 'cvs-update)

Sie können die Funktion aber auch einfach starten, indem Sie `M+``x` `cvs-update` eingeben (auch bekannt als `Esc+``x` `cvs update` .

Wenn es gestartet wurde, lässt cvs-update cvs update laufen, als ob es in dem Verzeichnis gestartet worden wäre, in dem sich die gerade in Emacs geladene Datei befindet - so, als hätten Sie dort auf der Kommandozeile cvs update eingegeben. Hier ist ein Beispiel für das, was Sie dann in Emacs sehen könnten:

Beispiel

    PCL-CVS release 1.05 from CVS release &#36;Name: &#36;.
    Copyright (C) 1992, 1993 Per Cederqvist
    Pcl-cvs comes with absolutely no warranty; for details consult the manual.
    This is free software, and you are welcome to redistribute it under certain
    conditions; again, consult the TeXinfo manual for details.
    Modified ci README.txt
    Modified ci fish.c
    ---------- End ----

Zwei Dateien sind lokal verändert worden. (Manche Versionen von pcl-cvs zeigen die Unterverzeichnisse der Dateien mit an.) Der nächste logische Schritt ist nun, den Commit einer oder beider Dateien vorzunehmen, was durch die Buchstaben ci auf jeder der beiden Zeilen angezeigt wird. Für den Commit einer Datei bewegen Sie einfach den Cursor auf deren Zeile, und drücken c. Es öffnet sich dann ein Buffer, in den Sie eine Log-Mitteilung beliebiger Länge eingeben können (echtes Bearbeiten von Log-Mitteilungen ist der Hauptvorteil von pcl-cvs gegenüber der Kommandozeile). Wenn die Mitteilung geschrieben ist, drücken Sie `Ctrl+``c` `Ctrl+``c` , um den Commit durchzuführen.

Wenn sich der Commit auf mehrere Dateien, die sich eine Log-Mitteilung teilen, auswirken soll, dann markieren Sie zunächst die gewünschten Dateien mit der Taste m. Ein Sternchen erscheint neben jeder markierten Datei:

Beispiel

    PCL-CVS release 1.05 from CVS release &#36;Name: &#36;.
    Copyright (C) 1992, 1993 Per Cederqvist
    Pcl-cvs comes with absolutely no warranty; for details consult the manual.
    This is free software, and you are welcome to redistribute it under certain
    conditions; again, consult the TeXinfo manual for details.
    * Modified ci README.txt
    * Modified ci fish.c
    ---------- End ----

Wenn Sie nun irgendwo c eingeben, dann sind davon alle (und nur die) markierten Dateien betroffen. Schreiben Sie die Log-Mitteilung, und übermitteln Sie die Daten wie gehabt mit `Ctrl+``c` `Ctrl+``c` .

Sie können auch d drücken, um cvs diff mit einer Datei (oder mehreren markierten Dateien) zu starten, und f, um eine Datei in Emacs zu bearbeiten. Es sind noch andere Kommandos möglich; drücken Sie `Ctrl+``h` `m` im Buffer mit der Dateiliste, um zu sehen, was sonst noch geht.

#### 5 Fehlerbehandlung in pcl-cvs

Das Programm pcl-cvs hatte schon immer eine etwas ungeschickte Art, mit Fehlermeldungen und Informationen von CVS umzugehen (auch wenn das möglicherweise in aktuelleren Versionen verbessert wurde). Wenn es auf eine Nachricht von CVS stößt, die es nicht kennt, wird es hysterisch, und Sie landen in einem Mail-Buffer, vorbereitet, um einen Bug-Report an den Autor von pcl-cvs abzuschicken. Dummerweise sind aber unter den CVS-Nachrichten, die pcl-cvs möglicherweise nicht erkennt, auch solche, die bei einer problematischen Integration (Merge) von Quelltext entstehen, was zwar selten, aber doch immer mal wieder vorkommt.

Falls pcl-cvs Sie also plötzlich in einen Mail-Buffer umschaltet - keine Panik. Lesen Sie den vorbereiteten Text der E-Mail sorgfältig durch - die problematische CVS-Ausgabe sollte da irgendwo drin stehen. Wenn es aussieht wie ein fehlgeschlagenes merge, dann verwerfen Sie die E-Mail einfach, und starten Sie erneut cvs-update. Diesmal sollte es keine Probleme mehr geben, da die Integration des problematischen Quelltexts bereits stattgefunden hat.

#### 6 Die Zukunft von pcl-cvs

Auch wenn ich den Eindruck erweckt haben mag, dass pcl-cvs kaum weiterentwickelt wird und eine riskante Investition sein könnte, scheint mir die Instabilität eine zeitweilige Erscheinung zu sein. Stefan Monnier reagiert sehr schnell auf Anfragen. (Ich schrieb ihn mehrfach an, während ich dieses Kapitel verfaßte, und erhielt immer sofort eine Antwort; er kümmert sich bereits um mehrere Fehler in der Version 2.9.6.) Sehr wahrscheinlich werden Sie zu dem Zeitpunkt, zu dem dieses Buch erschienen ist, bereits eine stabile Version 2.9.7 oder höher herunterladen können. [Anm.d.Übers.: 2.9.8 ist da.]

Ich habe sogar eine ermutigende E-Mail zu diesem Thema von Greg Woods erhalten, einem früheren Betreuer von pcl-cvs, die ich hier wiedergeben möchte:

E-Mail

    From: woods@most.weird.com (Greg A. Woods)
    Subject: Re: Status der pcl-cvs Betreuung, Stabilität der neueren Versionen?
    To: kfogel@read-bean.com
    Date: Sun, 29 Aug. 1999 18:59:19 -0400 (EDT)
    [...]

    Ich habe Stefans Versionen inzwischen einige Zeit benutzt und
    tatsächlich meinen eigenen Entwicklungszweig aufgegeben.

    Er hat eine Menge wirklich gute Arbeit in PCL-CVS gesteckt, und
    abgesehen von einigen wenigen Merkwürdigkeiten in Version 2.9.6, die
    ich inzwischen täglich nutze, ist es wirklich benutzbar (und es ist so
    unendlich viel benutzbarer mit aktuellen CVS-Versionen als die
    Version, die in der CVS-Distribution enthalten war! ;-).

    Ich habe eine Datei pcl-cvs.README auf meinem ftp-Server abgelegt, in
    der steht, dass die Dateien wirklich ziemlich alt sind (zumindest nach
    Internet-Zeit ;-), und einen Verweis auf Stefans ftp-Server angegeben.
    [...]

In einer späteren E-Mail sagte Greg, dass die FSF erwägt, pcl-cvs in ihre nächsten Ausgabe von Emacs (20.5) als Bestandteil zu integrieren, was den größten Teil der oben stehenden Installationshilfen überflüssig machen würde. Seufz. Manchmal ist es wirklich schwierig, mit der Entwicklung freier Software Schritt zu halten.