Node:cvslock -- Bloquea los repositorios para evitar la atomicidad, Next:, Previous:cvs2cl -- Genera ChangeLogs al estilo GNU, Up:Herramientas de terceros



cvslock - Bloquea los repositorios para evitar la atomicidad

Depende de: compilador de C para la instalación, nada para la ejecución

URL: ftp://riemann.iam.uni-bonn.de/pub/users/roessler/cvslock/

Este programa bloquea un repositorio CVS (ya sea su lectura o la escritura en él) de la misma manera en que lo hace CVS por lo que éste respetará el bloqueo. Esto puede resultar útil cuando, por ejemplo, necesita realizar una copia del repositorio completo y quiera evitar capturar partes de "commits" o archivos de bloqueo de otra gente.

La distribución de cvslock se encuentra excelentemente empaquete y puede instalarse de acuerdo con los procedimientos GNU habituales. He aquí la transcripción de una sesión de instalación típica:

floss$ 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
floss$ cd cvslock-0.1
floss$ ./configure
 ...
floss$ make
gcc -DHAVE_CONFIG_H -I. -I. -I.   -g -O2 -c cvslock.c
gcc -g -O2  -o cvslock  cvslock.o
floss$ make install
 ...
floss$

(Tenga en cuenta que quizá necesite llevar a cabo el make install como root).

Ahora cvslock ya se encuentra instalado como /usr/local/bin/cvslock. Cuando lo invoque puede especificar el repositorio con -d o mediante la variable de entorno $CVSROOT tal y como haría con CVS (en los siguientes ejemplo se usa -d). La única variable que se requiere es el nombre de directorio a bloquear en relación con la raíz del repositorio. En este ejemplo no hay subdirectorios por lo que sólo se crea un archivo de bloqueo:

floss$ ls /usr/local/newrepos/myproj/b-subdir/
random.c,v
floss$ cvslock -d /usr/local/newrepos  myproj/b-subdir
floss$ ls /usr/local/newrepos/myproj/b-subdir/
#cvs.rfl.cvslock.floss.27378  random.c,v
floss$ cvslock -u -p 27378 -d /usr/local/newrepos  myproj/b-subdir
floss$ ls /usr/local/newrepos/myproj/b-subdir/
random.c,v
floss$

Fíjese en que cuando retiré el bloqueo (-u para desbloquear) tuve que especificar -p 27378. Eso es porque cvslock usa los ID de los procesos de Unix al crear los nombres de los archivos de bloqueo para asegurarse de que sus bloqueos son únicos. Al desbloquear tiene que counicarle a cvslock qué instancia de bloqueo eliminar incluso si sólo hay una. Por esto, la opción -p le dice a cvslock de qué instancia previa de sí mismo se está deshaciendo (no obstante, puede usar -p con o sin -u).

Si va a estar trabajando con el repositorio por un tiempo, realizando varias operaciones directamente en el sistema de archivos, puede usar la opción -s para que cvslock inicie una nueva shell por usted. Consultará entonces la variable de entorno $SHELL en su shell actual para determinar qué intérprete de órdenes usar:

floss$ cvslock -s -d /usr/local/newrepos myproj

Los bloqueos permanecen hasta que salga del intérprete, momento en el que se eliminarán automáticamente. También puede utilizar la opción -c para ejecutar orden mientras se bloquea el repositorio. Al igual que con -s, los archivos de bloqueo se colocan antes de que se inicie la orden y se retiran una vez haya acabado. En el siguiente ejemplo bloqueamos el repositorio durante el tiempo suficiente para mostrar una lista con todos los archivos de bloqueo:

floss$ cvslock -c 'find . -name "*cvslock*" ' -d /usr/local/newrepos myproj
cvslock: '/usr/local/newrepos/myproj' locked successfully.
cvslock: Starting 'find . -name "*cvslock*" -print'...
./a-subdir/subsubdir/#cvs.rfl.cvslock.floss.27452
./a-subdir/#cvs.rfl.cvslock.floss.27452
./b-subdir/#cvs.rfl.cvslock.floss.27452
./#cvs.rfl.cvslock.floss.27452
floss$ find /usr/local/newrepos/myproj -name "*cvslock*" -print
floss$

La orden (el parámetro de la opción -c) se ejecuta con el directorio del repositorio especificado como su directorio de trabajo.

De manera predeterminada cvslock crea bloqueos de lectura. Puede decirle que use bloqueos de escritura mediante la opción -W. (Puede pasarle -R para especificar bloqueos de lectura pero de todas formas ése es el comportamiento predeterminado.) Quite siempre todos los bloqueos una vez haya acabado de manera que los procesos CVS del resto de usuarios no tengan que esperar innecesariamente.

Tenga en cuenta que cvslock debe ejecutarse en la máquina en la que reside el repositorio, no puede especificar un repositorio remoto. (Para más información ejecute man cvslock, página de manual que se habrá instalado al hacer make install.)