Benötigt: C-Compiler zur Installation; nichts Besonderes zur Laufzeit
URL: ftp://riemann.iam.uni-bonn.de/pub/users/roessler/cvslock/
Operationen auf dem Archiv (egal ob über cvs oder direkt an seinen
Dateien ausgeführte) geschehen normalerweise nicht atomar. Das
Programm cvslock sperrt ein CVS-Archiv (für Lese- oder Schreibzugriff)
in derselben Art, wie CVS das auch macht, sodass CVS die Sperrung
beachtet. Das kann beispielsweise nützlich sein, wenn Sie eine Kopie
des gesamten Archivs machen möchten, dabei aber vermeiden wollen, dass
Sie eventuell gerade laufende Commit-Vorgänge nur teilweise
mitbekommen oder die Lock-Dateien anderer Benutzer mit kopieren.
Das cvslock-Archiv ist sehr gut eingerichtet und kann wie jedes
GNU-Programm installiert werden. Hier ist der Mitschnitt eines
Installationsvorgangs:
user@linux ~$
zcat cvslock-0.1.tar.gz | tar xvf -
cvslock-0.1/ cvslock-0.1/Makefile.in cvslock-0.1/README cvslock-0.1/COPYING cvslock-0.1/Makefile.am cvslock-0.1/acconfig.h cvslock-0.1/aclocal.m4 cvslock-0.1/config.h.in cvslock-0.1/configure cvslock-0.1/configure.in cvslock-0.1/install-sh cvslock-0.1/missing cvslock-0.1/mkinstalldirs cvslock-0.1/stamp-h.in cvslock-0.1/cvslock.c cvslock-0.1/cvslock.1 cvslock-0.1/snprintf.c cvslock-0.1/cvslssh cvslock-0.1/VERSION
user@linux ~$
cd cvslock-0.1
user@linux ~$
./configure
...
user@linux ~$
make
gcc -DHAVE_CONFIG_H -I. -I. -I. -g -O2 -c cvslock.c gcc -g -O2 -o cvslock cvslock.o
user@linux ~$
make install
...
user@linux ~$
|
(Beachten Sie, dass Sie den Befehl make install möglicherweise als
Superuser (root) ausführen müssen.)
Nun ist cvslock als /usr/local/bin/cvslock installiert. Wenn Sie es
aufrufen, können Sie das Archiv mit -d oder über die
$CVSROOT-Umgebungsvariable angeben, genau wie bei CVS selbst auch (das
folgende Beispiel nutzt -d ). Das einzige benötigte Argument ist der
Name des Verzeichnisses, das gesperrt werden soll, relativ zum
Hauptverzeichnis des Archivs. Dieses Verzeichnis und alle
Unterverzeichnisse desselben werden dann gesperrt. In diesem Beispiel
gibt es keine Unterverzeichnisse, daher wird nur eine Lock-Datei
erzeugt:
user@linux ~$
ls /usr/local/archiv/projekt/b-verzeichnis/
random.c,v
user@linux ~$
cvslock -d /usr/local/archiv projekt/b-verzeichnis
user@linux ~$
ls /usr/local/archiv/projekt/b-verzeichnis/
#cvs.rfl.cvslock.floss.27378 random.c,v
user@linux ~$
cvslock -u -p 27378 -d /usr/local/archiv projekt/b-verzeichnis
user@linux ~$
ls /usr/local/archiv/projekt/b-verzeichnis/
random.c,v
user@linux ~$
|
Beachten Sie, dass ich -p 27378 angeben musste, als ich (mittels -u
für unlock) die Sperre wieder aufhob. Das kommt daher, dass cvslock
Unix-Prozessnummern zur Namensvergabe bei der Sperrung verwendet, um
sicherzustellen, dass die Namen der Lock-Dateien einzigartig sind.
Wenn Sie die Sperre nun entfernen, müssen Sie cvslock (mittels der
Option -p) mitteilen, welche Instanz Sie aufheben möchten, auch wenn
nur eine existiert. (Sie können jedoch -p auch ohne -u verwenden.)
Wenn Sie vorhaben, eine Weile im Archiv zu arbeiten und einiges direkt
im Dateisystem zu ändern, dann können Sie die Option -s verwenden, um
sich von cvslock eine neue Shell starten zu lassen. In diesem Fall
benutzt es die $SHELL-Umgebungsvariable in Ihrer aktuellen Shell, um
herauszufinden, welche Shell verwendet werden soll:
user@linux ~$
cvslock -s -d /usr/local/archiv projekt
|
Die Sperre bleibt dann genau so lange bestehen, bis Sie die Shell
verlassen, wonach sie automatisch aufgehoben wird. Sie können auch die
-c-Option verwenden, um einen Befehl auszuführen, während das Archiv
gesperrt ist. Genau wie bei -s werden zunächst die Lock-Dateien
erzeugt, dann wird der Befehl ausgeführt und nach dessen Ende die
Sperre wieder entfernt. Im folgenden Beispiel sperren wir das Archiv
gerade lange genug, um eine Liste der Lock-Dateien anzeigen zu können:
user@linux ~$
cvslock -c 'find . -name "*cvslock*" -print' -d /usr/local/archiv projekt
cvslock: '/usr/local/archiv/projekt' locked successfully. cvslock: starting'find . -name "*cvslock*" -print' ... ./a-verzeichnis/unterverzeichnis/#cvs.rfl.cvslock.floss.27452 ./a-verzeichnis/#cvs.rfl.cvslock.floss.27452 ./b-verzeichnis/#cvs.rfl.cvslock.floss.27452 ./#cvs.rfl.cvslock.floss.27452
user@linux ~$
find /usr/local/archiv/projekt -name "*cvslock*" -print
user@linux ~$
|
Das Kommando (das Argument zur Option -c) wird mit dem angegebenen
Archivverzeichnis als Arbeitsverzeichnis gestartet.
Normalerweise erzeugt cvslock eine Lesesperre. Wenn gegen
Schreibzugriff gesperrt werden soll, dann geht das mit der Option -W.
(Sie können für die Lesesperrung auch -R angeben, aber das ist ja
sowieso standardmäßig aktiv.) Entfernen Sie immer alle Sperren, wenn
Sie mit Ihrer Arbeit fertig sind, sodass andere CVS-Prozesse nicht
unnötig warten müssen.
Beachten Sie, dass cvslock auf der Maschine laufen muss, auf der sich
das Archiv befindet - es gibt keine Möglichkeit, ein externes Archiv
anzugeben. (Weitere Informationen erhalten Sie mit dem Befehl man
cvslock, wodurch eine Anleitung angezeigt wird, die beim make install für
cvslock mit installiert wurde.)
|