3. Curioseando un repositorio de CVS

La mejor forma de empezar a colaborar en un proyecto es tener su código. En este apartado vamos a conectarnos a un servidor CVS, descargaremos uno de sus módulos y lo mantendremos actualizado según pase el tiempo.

3.1. Formas de identificarse en un servidor CVS

Normalmente el servidor de CVS está escuchando en el puerto 2401 pserver y es la configuración por defecto de los clientes, por ejemplo: cvs -d :pserver:[email protected]:/home/cvs update.

Esta identificación se realiza por texto plano, nos pedirá una contraseña asociada al usuario anoncvs. Este tipo de identificacion recuerda la contraseña del usuario por lo que solo será necesario logearse una sola vez (en el fichero $HOME/.cvspass). Este método es inseguro para los desarrolladores del proyecto si bien para permitir el acceso al código a todo el mundo es una buena solución.

3.1.1. Usando SSH para conectarnos con el servidor

Por motivos de seguridad se recomienda a los desarrolladores (y a todo aquel que tenga cuenta en el servidor) el uso de SSH para establecer comunicaciones con el servidor CVS, este tipo de identificación obliga a introducir la contraseña siempre que se realice una operación con el servidor de CVS.

Para poder realizar la conexión con SSH será necesario fijar el valor de la variable CVS_RSH a SSH y cambiar la método de conexión pserver a ext. Es interesante fijar las siguientes variables en el profile para economizar las pulsaciones (y la vida útil del teclado ;-) )

charlie$ CVS_RSH=ssh
charlie$ CVSROOT=:ext:[email protected]:/home/cvs
charlie$ export CVS_RSH CVSROOT
     

A partir de este momento el cliente de cvs tomará por defecto conectar utilizando ssh y al repositorio disponible en servidor.dom identificándome como $USER.

3.1.2. Desde un repositorio de nuestra propia máquina

Si el repositorio al que queremos acceder reside en el mismo sistema en el que trabajamos no será necesario especificar el método de conexión ni al sistema al que se accede, solamente es necesario especificar la ruta hasta el repositorio.

Para acceder al repositorio dentro de mi sistema utilizo export CVSROOT=/var/lib/cvs o la opción -d /var/lib/cvs y la operación que quiera realizar.

3.2. Descargar un proyecto del repositorio

Para descargar un proyecto del repositorio utilizaremos el comando checkout o su abreviatura co y el nombre del módulo a descargar.

Supongamos que queremos colaborar en el proyecto VIM-ES, que se encarga de traducir la documentación existente del editor VI, para ello vamos a descargar su proyecto vimes.

charlie$ pwd
/home/charlie/cvs
 
charlie$ cvs -z3 -d \
  :pserver:anoncvs:[email protected]:/var/cvs/vim \
  checkout vimes
cvs server: Updating vimes
U vimes/DIRECTORIOS
U vimes/PROGRESO
cvs server: Updating vimes/beer
cvs server: Updating vimes/doc
U vimes/doc/autocmd.txt
U vimes/doc/change.txt
U vimes/doc/cmdline.txt
U vimes/doc/debugger.txt
# ...
  
charlie$ ls
vimes
    

El programa nos informa de los pasos que está siguiendo, las U significa que la copia local ha sido creada. El resultado es la creación de un directorio llamado como el módulo que hemos descargado y que contiene todos los archivos y subdirectorios que cuelgan del mismo. Prestar atención a la creación del directorio CVS en cada directorio del módulo.

3.3. Actualizando nuestra copia local

Para actualizar nuestra copia local respecto a los cambios del repositorio central se utiliza el comando update. El resultado de este comando nos informará de que archivos hayamos modificado localmente con una M, de los ficheros que se actualizan con U[1], los ficheros que tienen conflictos con C y un ? en caso de que tengamos ficheros localmente que no existen en el repositorio.

Después de unas semanas curioseando el proyecto vimes queremos comprobrar que tenemos una copia local actualizada para ello haremos lo siguiente:

charlie$ pwd
/home/charlie/cvs/vimes
# Como ya estoy en el directorio vimes no será necesario espeficar
# ni el repositorio ni el módulo pues están en el directorio CVS
  
charlie$ cvs -z3 update
cvs server: Updating .
U ./PROGRESO
cvs server: Updating beer
cvs server: Updating doc
cvs server: Updating doc-6.0
# ...
    

El resultado, hemos actualizado el fichero PROGRESO (y algunos archivos más) y hemos revisado el estado de todo.

Puede ocurrir que en algún momento cvs nos informe de la existencia de un fichero que no volverá a ser pertinente en el proyecto, es decir, ha sido eliminado. El cliente nos mostrará el mensaje y lo borrará.

Con los directorios no ocurre lo mismo. Si un directorio se crea en un proyecto depués de nuestro primer checkout no se nos notificará su existencia (tendremos que estar informados de antemano), por lo que tendremos que volver a ejecutar un cvs checkout módulo si queremos trabajar con el nuevo directorio creado en el proyecto. Si un directorio después de una actualización se queda vacio no se borra automáticamente. Para borrar los directorios vacios añadiremos la opción -P, quedando así: cvs update -P.

Notas

[1]

La actualización implica descargar los cambios a la versión local, pero no actualizar los archivos locales al repositorio central