Node:Cómo aparecen las alarmas en el repositorio, Previous:Recomendar a la gente usar alarmas, Up:Alarmas (CVS como telefono)



Cómo aparecen las alarmas en el repositorio

Para acabar con las cajas negras y los misterios sin solución vamos a hacer una rápida mirada a cómo las alarmas son implementadas en el repositorio. Será rápido ya que no es agradable.

Cuando usted establece una alarma

floss$ pwd
/home/jrandom/myproj
floss$ cvs watch add hello.c
floss$ cvs watchers
hello.c jrandom edit    unedit  commit
floss$

CVS la guarda en un fichero especial, CVS/fileattr, del subdirectorio apropiado del repositorio.

floss$ cd /usr/local/newrepos
floss$ ls
CVSROOT/   myproj/
floss$ cd myproj
floss$ ls
CVS/          a-subdir/     foo.gif,v
README.txt,v  b-subdir/     hello.c,v
floss$ cd CVS
floss$ ls
fileattr
floss$ cat fileattr
Fhello.c        _watchers=jrandom>edit+unedit+commit
floss$

El hecho de que fileattr sea almacenado en un subdirectorio llamado CVS del repositorio no significa que el repositorio se haya convertido en una copia de trabajo. Simplemente el nombre CVS estaba ya reservado en la copia de trabajo para guardar información con lo que no habrá ningún proyecto que necesite un subdirectorio con ese nombre en el repositorio.

No describiré el formato de fileattr formalmente; se puede ver bastante bien estudiando los cambios que ocurren en él entre orden y orden.

floss$ cvs watch add hello.c
floss$ cat /usr/local/newrepos/myproj/CVS/fileattr
Fhello.c        _watchers=jrandom>edit+unedit+commit
floss$ cvs watch add README.txt
floss$ cat /usr/local/newrepos/myproj/CVS/fileattr
Fhello.c        _watchers=jrandom>edit+unedit+commit
FREADME.txt     _watchers=jrandom>edit+unedit+commit
floss$ cvs watch on hello.c
floss$ cat /usr/local/newrepos/myproj/CVS/fileattr
Fhello.c        _watchers=jrandom>edit+unedit+commit;_watched=
FREADME.txt     _watchers=jrandom>edit+unedit+commit
floss$ cvs watch remove hello.c
floss$ cat /usr/local/newrepos/myproj/CVS/fileattr
Fhello.c        _watched=
FREADME.txt     _watchers=jrandom>edit+unedit+commit
floss$ cvs watch off hello.c
floss$ cat /usr/local/newrepos/myproj/CVS/fileattr
FREADME.txt     _watchers=jrandom>edit+unedit+commit
floss$

Registros de edición son almacenados en fileatrr también. Esto es lo que pasa cuando qsmith se añade asimismo como un editor.

paste$ cvs edit hello.c

floss$ cat /usr/local/newrepos/myproj/CVS/fileattr
Fhello.c        _watched=;_editors=qsmith>Tue Jul 20 04:53:23 1999 GMT+floss\
+/home/qsmith/myproj;_watchers=qsmith>tedit+tunedit+tcommit
FREADME.txt     _watchers=jrandom>edit+unedit+commit

Finalmente, observe que CVS quita le fichero fileattr y subdirectorio CVS cuando no hay más vigilantes o editores para cualquier fichero en ese directorio:

paste$ cvs unedit

floss$ cvs watch off
floss$ cvs watch remove
floss$ cat /usr/local/newrepos/myproj/CVS/fileattr
cat: /usr/local/newrepos/myproj/CVS/fileattr: No such file or directory
floss$

Debe quedar claro depués de esta breve exposición que los detalles del tratamiento del formato de fileattr se dejan a CVS. La principal razón para tener una comprensión básica del formato, además de la satisfacción inherente de saber que es lo que ocurre detrás de las cortinas, es si usted va a escribir una extensión a las alarmas de CVS, o está depurando algún error en ellas. Es suficiente con que no se alarme si ve CVS/ subdirectorios apareciendo y desapareciendo de su repositorio. Son los únicos lugares seguros que CVS tiene para almacenar meta-información como las listas de vigilancia.