SelfLinux Programmierung CVS CVS-Referenz Abschnitt 6 | SelfLinux-0.13.0

| CVS-Referenz | Autor Formatierung GPL

#### 8 Archivverwaltungsdateien

Die Verwaltungsdateien eines Archivs werden im CVSROOT-Unterverzeichnis des Archivs gespeichert. Diese Dateien kontrollieren diverse Aspekte im Verhalten von CVS (selbstverständlich nur innerhalb dieses Archivs).

Generell werden die Verwaltungsdateien genauso unter Revisionskontrolle gehalten wie alle anderen Dateien im Archiv (Ausnahmen werden extra angemerkt). Im Gegensatz zu anderen Dateien werden ausgecheckte Kopien der Verwaltungsdateien im Archiv jedoch direkt neben den korrespondierenden RCS-Dateien abgespeichert. Diese ausgecheckten Kopien üben die wirkliche Kontrolle über das Verhalten von CVS aus.

Der normale Weg, um die Verwaltungsdateien zu modifizieren, ist der, einen Checkout auf eine Arbeitskopie des CVSROOT-Moduls durchzuführen, die Änderungen vorzunehmen und einen Commit zu machen. CVS aktualisiert die ausgecheckten Dateien im Archiv automatisch (siehe checkoutlist). In Notfällen ist es jedoch auch möglich, die ausgecheckten Kopien im Archiv direkt zu bearbeiten.

Eventuell interessieren Sie sich auch für die Beschreibung von Verwaltungsdateien in Kapitel 4, die auch Beispiele umfasst.

#### 8.1 Gemeinsame Syntax

In allen Verwaltungsdateien markiert ein # am Zeilenbeginn einen Kommentar; diese Zeile wird von CVS nicht beachtet. Ein Backslash \ vor einem Zeilenende bewirkt das Ignorieren des Zeilenumbruchs.

Einige der Dateien (commitinfo, loginfo, taginfo und rcsinfo) haben weitere syntaktische Konventionen gemeinsam. Innerhalb dieser Dateien befindet sich am linken Rand jeder Zeile ein regulärer Ausdruck (der mit einem Datei- oder Verzeichnisnamen verglichen wird), und der Rest der Zeile ist ein Programmaufruf, eventuell mit Argumenten, der ausgeführt wird, sobald irgendetwas mit der Datei geschieht, auf die der reguläre Ausdruck passt. Das Programm wird mit dem Hauptverzeichnis des Archivs als Arbeitsverzeichnis gestartet.

In diesen Dateien dürfen zwei spezielle reguläre Ausdrücke verwendet werden: ALL und DEFAULT. Der Ausdruck ALL passt für jeden beliebigen Datei- oder Verzeichnisnamen, egal ob noch andere Ausdrücke dafür passen oder nicht, und DEFAULT wird nur verwendet, falls keiner der anderen Ausdrücke passt.

#### 8.2 Gemeinsame Variablen

Die Info-Dateien erlauben des Weiteren die Expansion gewisser Variablen zur Laufzeit. Um eine Variable zu expandieren, muss ihr ein Dollarzeichen vorangestellt sein (und setzen Sie sie in geschweifte Klammern, um sicherzugehen). Es folgen die Variablen, die CVS bekannt sind:

- ${CVSROOT}
  - Das Hauptverzeichnis des Archivs

- ${RCSBIN} (Überholt)
  - Benutzen Sie diese Variable nicht. Sie findet nur noch in alten CVS-Versionen (1.9.18 und älter) Verwendung.

- ${CVSEDITOR} ${VISUAL} ${EDITOR}
  - Alle diese Variablen expandieren zu dem Editor, den CVS für Log-Mitteilungen verwendet.

- {USER}
  - Der Benutzer, der CVS laufen lässt (auf der Serverseite).

Benutzervariablen

Benutzer können zudem eigene Variablen setzen, wenn sie beliebige CVS-Kommandos starten (siehe die globale -s-Option). Auf diese Variablen kann aus den *info-Dateien zugegriffen werden, indem ihnen ein Gleichheitszeichen vorangestellt wird wie z.B. in ${=VAR}.

#### 8.3 Liste der Archivverwaltungsdateien

Es folgt eine Liste aller Archivverwaltungsdateien:

checkoutlist

Diese Datei enthält eine Liste von Dateien, von denen ausgecheckte Kopien im Archiv gehalten werden sollten. Jede Zeile enthält einen Dateinamen und eine Fehlermeldung, die CVS ausgeben soll, falls aus irgendeinem Grund die Datei nicht im Archiv ausgecheckt werden kann.

DATEINAME FEHLERMELDUNG

Da CVS bereits von sich aus ausgecheckte Kopien der existierenden Verwaltungsdateien behält, müssen diese nicht in der checkoutlist-Datei aufgeführt werden. Speziell die folgenden Dateien brauchen niemals in der checkoutlist-Datei zu stehen: loginfo, rcsinfo, editinfo, verifymsg, commitinfo, taginfo, ignore, checkoutlist, cvswrappers, notify, modules, readers, writers und config.

commitinfo

Spezifiziert Programme, die, in Abhängigkeit von den betroffenen Dateien, bei einem Commit gestartet werden sollen. Jede Zeile besteht aus einem regulären Ausdruck, gefolgt von einem Kommando:

REGULÄRER_AUSDRUCK PROGRAMM [ARGUMENTE]

Dem Kommando werden außer den in der Datei vermerkten Argumenten zusätzliche Parameter übergeben, und zwar der volle Pfad zum Archiv gefolgt von den Namen aller Dateien, die per Commit übertragen werden sollen. Diese Dateien können durch das PROGRAMM untersucht werden; ihr Inhalt entspricht dem der Dateien aus der Arbeitskopie, auf die commit angewendet werden soll. Beendet sich das PROGRAMM mit einem Rückgabewert ungleich null, so schlägt commit fehl; anderenfalls wird der Commit durchgeführt. (Siehe auch Gemeinsame Syntax weiter vorne in diesem Kapitel.)

config

Kontrolliert diverse globale (nicht projektspezifische) Archivparameter. Die Syntax jeder Zeile ist:

ParameterName=yes|no

mit Ausnahme des LockDir Parameters, der einen absoluten Pfadnamen als Argument benötigt.

Die folgenden Parameter werden unterstützt:

RCSBIN (normal: =no)

(Überholt.) Diese Option wird aus Kompatibilitätsgründen stillschweigend akzeptiert, hat jedoch keinerlei Wirkung mehr.

SystemAuth (normal: =no)

Wenn yes, dann konsultiert die pserver Authentifizierung die Benutzerdatenbank des Systems - normalerweise /etc/passwd - falls ein Benutzer nicht in CVSROOT/passwd gefunden werden kann. Wenn no, muss der Benutzer in CVSROOT/passwd stehen, um Zugriff über die :pserver:-Methode zu erhalten.

PreservePermissions (normal: =no)

Wenn yes, dann versucht CVS Dateizugriffsrechte und andere spezielle Dateisysteminformationen (wie Device-Nummern und Ziele symbolischer Links) möglichst zu erhalten. Dies möchten Sie wahrscheinlich nicht, weil diese Option sich nicht unbedingt immer verhält wie erwartet. (Siehe auch den Abschnitt Special Files im Cederqvist mit weiteren Details.)

TopLevelAdmin (normal: =no)

Wenn yes, dann erzeugen Checkouts ein CVS/-Unterverzeichnis neben jedem Dateibaum der Arbeitskopie (im Mutterverzeichnis der Arbeitskopie). Dies kann nützlich sein, wenn Sie viele Arbeitskopien aus demselben Archiv auschecken; andererseits wird durch eine Einstellung an dieser Stelle jeder Benutzer des Archivs betroffen.

LockDir (normal: nicht gesetzt)

Das Argument nach dem Gleichheitszeichen ist der Pfad zu einem Verzeichnis, in dem CVS Lock-Dateien erzeugen kann. Wenn dies nicht gesetzt ist, werden Lock-Dateien innerhalb des Archivs jeweils bei den korrespondierenden RCS-Dateie jedes Projektes angelegt. Das bedeutet, dass Benutzern dieser Projekte auf Dateisystemebene Schreibzugriff auf diese Archivverzeichnisse gewährt sein muss.

cvsignore

Ignoriert bestimmte Dateien, wenn Aktualisierungen, Imports oder Releases durchgeführt werden. Normalerweise ignoriert CVS sowieso einige Arten von Dateien. (Für eine vollständige Liste siehe die -I Option zu import weiter vorne in diesem Kapitel.) Sie können diese Liste erweitern, indem Sie zusätzliche Dateinamen oder Wildcards in der cvsignore-Datei eintragen. Jede Zeile gibt einen Dateinamen oder ein Muster, z.B.:

README.msdos

*.html

blah?.out

Hierdurch wird CVS veranlasst, alle Dateien mit dem Namen README.msdos, alle Dateien, die auf .html enden, und alle Dateien, die mit blah anfangen und mit .out enden, zu ignorieren. (Theoretisch könnten Sie mehrere Dateien oder Wildcards in jeder Zeile durch Leerzeichen getrennt angeben, aber die Lesbarkeit ist bei einem Ausdruck pro Zeile besser. Bedauerlicherweise impliziert diese Tatsache auch, dass es keinen Weg gibt, Dateinamen, die Leerzeichen enthalten, zu spezifizieren, außer unter Verwendung von Wildcards.)

Ein ! an beliebiger Stelle innerhalb der Liste macht alle vorangehenden Einträge unwirksam. (Siehe $CVSIGNORE im bschnitt Umgebungsvariablen in diesem Kapitel für eine vollständigere Diskussion des Verhaltens von Ignore.)

cvswrappers

Definiert gewisse Filtermethoden, basierend auf dem Dateinamen. Jede Zeile enthält einen Dateinamen oder eine Wildcard, gefolgt von einer Option, die den Filtertyp festlegt, und ein Argument zu dieser Option.

Optionen:

- -m
  - Spezifiziert eine Aktualisierungsmethode. Mögliche Argumente sind MERGE, was eine automatische Integration in die Arbeitskopie bewirkt, sowie COPY, was bewirkt, dass keine Integration versucht wird, sondern der Benutzer mit beiden Versionen einer Datei konfrontiert wird und das selber regeln muss. Standardeinstellung ist MERGE, außer bei Binärdateien (solche, deren Schlüsselwortersetzungs-Methode auf -kb gesetzt ist). (Siehe auch den Abschnitt Schüsselwortersetzung weiter vorne in diesem Kapitel.) Dateien, die als binär markiert sind, nutzen automatisch die COPY Methode, sodass kein Grund besteht, für diese extra einen -m COPY-Wrapper zu definieren.

- -k
  - Legt eine Schlüsselwortersetzungs-Methode fest. Alle üblichen Methoden sind erlaubt. (Siehe auch den Abschnitt Schüsselwortersetzung weiter vorne in diesem Kapitel mit einer vollständigen Liste.)

Hier ist ein Beispiel für eine cvswrappers-Datei:

*.blob -m COPY

*.blink -k o

Diese cvswrappers-Datei legt fest, dass für Dateien, die auf .blob enden, keine automatische Integration versucht werden soll und für Dateien, die auf .blink enden, die Schlüsselwortersetzung unterdrückt wird. (Siehe auch .cvswrappers im Abschnitt Dateien in der Arbeitskopie in diesem Kapitel.)

editinfo

Diese Datei ist überholt. Sehr überholt.

history

Speichert eine ständig anwachsende Historie von Aktivitäten im Archiv, zur Benutzung durch das cvs history-Kommando. Um diese Funktion zu deaktivieren, löschen Sie einfach die history-Datei. Wenn sie existiert, sollte sie am besten für alle beschreibbar sein, um spätere Probleme mit Dateizugriffsrechten zu vermeiden.

Der Inhalt dieser Datei ändert in keiner Weise das Verhalten von CVS (selbstverständlich mit Ausnahme der Ausgabe des Befehles cvs history).

loginfo

Spezifiziert Programme, welche die Log-Mitteilungen bei jedem Commit bearbeiten, abhängig davon, was von dem Commit betroffen ist. Jede Zeile setzt sich aus einem regulären Ausdruck, gefolgt von einem Befehlsausdruck, zusammen:

REGULÄRER_AUSDRUCK PROGRAMM [ARGUMENTE]

Dem PROGRAMM wird die Log-Mitteilung auf die Standardeingabe übermittelt.

Einige spezielle Codes können in ARGUMENTE verwendet werden: %s symbolisiert die Namen der Dateien, die der Commit betrifft, %V steht für die alten Revisionen vor dem Commit und %v für die neuen Revisionen nach dem Commit. Wenn mehrere Dateien betroffen sind, ist jedes Element der Ersetzung durch Leerzeichen vom nächsten getrennt. Beispielsweise wird bei einem Commit, der zwei Dateien betrifft, %s zu hallo.c README.txt und %v zu 1.17 1.12.

Sie können die Codes in geschweiften Klammern kombinieren, wodurch jeder zu einem Namen gehörige Block intern durch Kommata, die Blöcke an sich durch Leerzeichen getrennt werden. Um das vorige Beispiel weiterzuführen, sähe beispielsweise die Expansion von %{sv} so aus: hallo.c,1.17 README.txt,1.12.

Wenn überhaupt irgendeine % Expansion durchgeführt wird, dann wird der Pfad im Archiv vorangestellt. Das heißt, das letzte Beispiel ergäbe in Wirklichkeit:

myproj hallo.c,1.17 README.txt,1.12

Wenn PROGRAMM mit einem Rückgabewert ungleich null beendet wird, so schlägt commit fehl; anderenfalls wird die Aktion fortgeführt. (Siehe auch den Abschnitt gemeinsame Syntax weiter vorn in diesem Kapitel.)

modules

Diese Datei bildet Namen auf Archivverzeichnisse ab. Der generelle Aufbau der Dateizeilen ist:

MODUL [OPTIONEN] [&ANDERES_MODUL...] [VERZEICHNIS] [DATEIEN]

VERZEICHNIS muss kein Top-Level-Projektverzeichnis sein - es kann genauso gut ein Unterverzeichnis sein. Werden irgendwelche DATEIEN angegeben, so besteht das Modul nur aus diesen DATEIEN in diesem VERZEICHNIS.

Ein Und-Zeichen, gefolgt von einem Modulnamen, bewirkt, dass die Expansion jenes Moduls auf dieser Zeile übernommen wird.

Optionen:

- -a
  - Dies ist ein Modul-Alias, was heißt, es expandiert buchstäblich zu allem, was nach den OPTIONEN folgt. In diesem Falle ist das VERZEICHNIS/DATEIEN-Verhalten deaktiviert, und alles nach den OPTIONEN wird als andere Module oder Archivverzeichnisse angesehen. Wenn Sie die -a-Option verwenden, können Sie bestimmte Verzeichnisse von anderen Modulen ausnehmen, indem Sie ihnen ein Ausrufezeichen (!) voranstellen. Zum Beispiel bedeutet

user@linux ~$ top_proj -a !meinproj/a-verzeichnis !meinproj/b-verzeichnis meinproj

- - dass ein Checkout von top_proj alle Dateien in meinproj betrifft, außer denen in den Verzeichnissen a-verzeichnis und b-verzeichnis.

- -d NAME
  - Nennt das Arbeitsverzeichnis NAME, anstatt den Modulnamen zu verwenden.

- -e PROGRAMM
  - Startet PROGRAMM, wenn Dateien in diesem Modul exportiert werden.

- -i PROGRAMM
  - Startet PROGRAMM, wenn Commits von Dateien in diesem Modul stattfinden. Dem Programm wird ein Argument übergeben - der vollständige Pfad zu der fraglichen Datei innerhalb des Archivs. (Siehe auch commitinfo, loginfo und verifymsg für ausgeklügeltere Methoden zum Starten von Programmen bei einem Commit.)

- -o PROGRAMM
  - Startet PROGRAMM, wenn Dateien in diesem Modul ausgecheckt werden.

- -s STATUS
  - Legt einen Status für dieses Modul fest. Wenn die modules-Datei ausgegeben wird (mit cvs checkout -s), dann werden die Module zunächst nach Status, dann nach Namen sortiert. Diese Option hat keine weitere Wirkung auf CVS, also nutzen Sie sie nach Belieben. Sie können Sie benutzen, um nach beliebigen Kriterien zu sortieren: beispielsweise Status, Verantwortliche für den Quelltext oder Sprache der Datei.

- -t PROGRAMM
  - Startet PROGRAMM, wenn Dateien in diesem Modul mittels cvs rtag markiert werden. Dem Programm werden zwei Argumente mitgegeben: der Name des Moduls und der symbolische Name der Markierung. Das Programm wird nur für rtag aufgerufen, nicht für tag. Ich habe keine Ahnung, warum diese Unterscheidung gemacht wird. Die taginfo -Datei könnte nützlicher für Sie sein, wenn Sie Programme durch tag starten möchten.

- -u PROGRAMM
  - Startet PROGRAMM, immer wenn eine Arbeitskopie dieses Moduls aus seinem Hauptverzeichnis heraus aktualisiert wird. Dem Programm wird ein einzelnes Argument übergeben: Der vollständige Dateiname zum Archiv des Moduls.

notify

Kontrolliert, wie die Benachrichtigungen für beobachtete Dateien durchgeführt werden. (Möglicherweise möchten Sie hierzu auch bei den watch- und edit-Kommandos nachlesen oder den Abschnitt Watches in Kapitel 6 anschauen.) Jede Zeile hat die übliche Form:

REGULÄRER_AUSDRUCK PROGRAMM [ARGUMENTE]

Ein %s innerhalb der ARGUMENTE wird zu dem Namen des Benutzers expandiert, der benachrichtigt werden soll, während der Rest der Information bezüglich der Benachrichtigung dem PROGRAMM auf der Standardeingabe übergeben wird. Üblicherweise ist diese Information eine kurze Nachricht, die dazu geeignet ist, eine E-Mail an den Benutzer zu erzeugen. (Siehe auch den Abschnitt gemeinsame Syntax weiter vorne in diesem Kapitel.)

In der Standardkonfiguration von CVS hat die notify-Datei eine Zeile:

ALL mail %s -s "CVS notification"

die meistens auch vollständig ausreicht.

passwd

Enthält Authentisierungsdaten zur Nutzung mit der pserver-Zugriffsmethode. Jede Zeile hat die Form:

BENUTZER:VERSCHLÜSSELTES_PASSWORT[:SYSTEM_BENUTZER]

Ist kein SYSTEM_BENUTZER gegeben, wird BENUTZER als der Systembenutzername angenommen.

rcsinfo

Definiert ein Formular, das für Log-Mitteilungen ausgefüllt werden sollte, die mit einem interaktiven Editor erstellt werden. Jede Zeile von rcsinfo sieht wie folgt aus:

REGULÄRER_AUSDRUCK DATEI_MIT_FORMULARVORLAGE

Die Vorlage wird an extern gelagerte Arbeitskopien übergeben, wenn diese einen Checkout durchführen, sodass eventuelle Änderungen an der Vorlage zunächst ohne Wirkung bleiben, da die externen Kopien die alte Version weiterverwenden. (Siehe auch den Abschnitt gemeinsame Syntax in diesem Kapitel.)

taginfo

Startet ein Programm beim Setzen von Markierungen. (Üblicherweise um zu überprüfen, dass die Markierungen einem bestimmten Schema folgen). Jede Zeile hat die Form:

REGULÄRER_AUSDRUCK PROGRAMM

Dem Programm wird ein Satz von Argumenten übergeben. In dieser Reihenfolge sind das der symbolische Name der Markierung, die Operation (siehe unten), das Archiv und so viele Paare aus Dateiname/Revision, wie Dateien von der Aktion betroffen sind. Die Datei/Revision-Paare sind durch Leerzeichen getrennt, wie der Rest der Argumente.

Die Operation ist entweder add, mov oder del. (mov bedeutet, dass die -F-Option des tag-Befehls verwendet wurde.)

Wenn PROGRAMM mit einem Rückgabewert ungleich null beendet wird, so schlägt der tag-Befehl fehl; andernfalls wird er fortgeführt. (Siehe auch den Abschnitt gemeinsame Syntax weiter vorn in diesem Kapitel.)

users

Verknüpft Benutzernamen mit E-Mail-Adressen. Jede Zeile sieht aus wie:

BENUTZERNAME:EMAIL_ADRESSE

Hiermit können Benachrichtigungen über beobachtete Dateien an EMAIL_ ADRESSE anstatt an den BENUTZERNAMEN auf der Maschine mit dem Archiv versendet werden. (Alles, was hier gemacht wird, ist die Kontrolle der Expansion von %s in der notify-Datei.) Sollte die EMAIL_ADRESSE Leerzeichen enthalten, dann stellen Sie sicher, dass sie in Anführungszeichen steht.

Wenn Benutzer-Aliasing in der passwd-Datei verwendet wird, dann ist der Benutzername, der hier verglichen wird, der CVS-Benutzername (der auf der linken Seite), nicht der Systembenutzername (rechts, falls vorhanden).

val-tags

Diese Datei dient als Zwischenspeicher für gültige Markierungen, um deren Auffindung zu beschleunigen. Es sollte nie notwendig sein, dass Sie diese Datei bearbeiten müssen, aber es könnte notwendig sein, die Zugriffs- oder Eigentumsrechte zu ändern, wenn Leute Probleme beim Zugriff auf oder bei der Erzeugung von Markierungen haben.

verifymsg

Wird in Verbindung mit rcsinfo verwendet, um das Format von Log-Mitteilungen zu verifizieren. Jede Zeile hat die Form:

REGULÄRER_AUSDRUCK PROGRAMM [ARGUMENTE]

Der vollständige Pfad zur aktuellen Vorlage für Log-Mitteilungen (siehe auch rcsinfo weiter vorne in diesem Kapitel) wird hinter dem letzten, in der verifymsg-Datei angegebenen Argument angefügt. Wenn PROGRAMM mit einem Rückgabewert ungleich null beendet wird, so schlägt commit fehl; andernfalls wird die Aktion fortgeführt. (Siehe auch den Abschnitt gemeinsame Syntax weiter vorn in diesem Kapitel.)