Node:cvslock -- Bloquea los repositorios para evitar la atomicidad, Next:cvsq -- Encola órdenes CVS para una posterior conexión, Previous:cvs2cl -- Genera ChangeLogs al estilo GNU, Up:Herramientas de terceros
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
.)