# CVS para Desarrolladores de Moodle

> CVS es un Sistema Concurrente de Versiones, una forma de trabajo habitualmente utilizada para almacenar el código fuente de grandes proyectos de software. CVS almacena todas las versiones de todos lo ficheros de tal forma que nada es nunca perdido, y su utilización por varias personas es registrada. También proporciona una forma de combinar el código de dos o más personas que estén trabajando simultáneamente en el mismo fichero. Todo el código y sus versiones son almacenados en un servidor central (en el caso de Moodle, el de Sourceforge).

> Si únicamente quieres utilizar el CVS para descargar Moodle y ponerlo en marcha, posiblemente no necesitas esta página - simplemente sigue las instrucciones que aparecen en la Pagina de Descargas de Moodle.

> 1. Uniéndote al proyecto como desarrollador
> 2. Módulos CVS
> 3. Comandos básicos CVS
>    3.1. CVS en Unix
>    3.2. CVS en Windows
> 4. Trabajando con ramas
>    4.1. Desarrollando en el tronco (trunk)
>    4.2. Ramas (branches) estables para cada versión
>    4.3. Ramas de funcionalidades para grandes cambios

> ## 1. Uniéndote al proyecto como desarrollador

> > ¡Entonces, se te han ofrecido permisos de escritura en CVS para ayudarnos a desarrollar y mantener Moodle! ¡Bienvenido a bordo!

> > Para poder escribir cambios en el archivo de CVS Moodle, primero necesitas tener una cuenta en Sourceforge (el registro es libre y sencillo). Para los ejemplos en esta página asumiremos que tu nombre de usuario es miusuario y tu contraseña es micontraseña. Presta especial atención a las instrucciones de sourceforge para crear tu directorio de CVS - algo que tendrás que hacer con cada cuenta para "activarla" para CVS. Básicamente tienes que utilizar ssh para conectarte interactivamente con cvs.sourceforge.net.

> > Una vez que tengas una cuenta funcionando en Sourceforge, contacta con Martin Dougiamas para que él pueda configurar tu cuenta con los accesos correspondientes a los directorios de Moodle.

> > Para evitar que cada vez que ejecutes un comando de CVS el sistema te pregunte micontraseña, sigue las instrucciones de Sourceforge para utilizar claves autorizadas. Este paso es opcional, pero puede hacer tu experiencia con CVS mucho más cómoda.

> > Con todo esto hecho, deberías tener todos los permisos necesarios, así que únicamente necesitas configurar tu ordenador y descargar los fuentes actuales para empezar a trabajar con ellos.

> ## 2. Módulos CVS

> > Dentro de CVS la palabra "módulos" se hace referencia a colecciones separadas de código. En Moodle tenemos los siguientes módulos en nuestro repositorio:

> > > moodle - el código fuente principal de Moodle

> > > contrib - contribuciones de los usuarios y todo tipo de código en desarrollo

> > > mysql - un phpMyAdmin personalizado para trabajar con la base de datos de Moodle

> > > windows-cron - un pequeño paquete que hace posible el funcionamiento del cron en Windows

> > > docs - variada documentación extra generada por los usuarios

> > La mayoría de la gente está trabajando en las funcionalidades existentes en el módulo moodle, pero muchos también están contribuyendo con nuevas ideas en el módulo contrib. Una vez que el código alcanza cierto nivel de madurez en la zona de contrib puede ser movido a la zona principal de moodle.

> ## 3. Comandos básicos CVS

> > ### 3.1 CVS en Unix

> > > El sistema CVS de Sourceforge utiliza ssh como una capa de transporte para seguridad, por lo que tendrás que tener definida la variable de entorno CVS_RSH en tu sesión de Unix. Lo mejor es poner estos comandos en tus archivos .bashrc o .cshrc para que no tengas que teclearlos repetidamente:

> > > setenv CVS_RSH ssh (para csh, tcsh etc)
> > > export CVS_RSH=ssh (para sh, bash etc)

> > > A continuación puedes obtener (checkout) la última versión de desarrollo de Moodle usando ésto (todo en la misma línea):

> > > cvs -z3 -d:ext:miusuario@cvs.sourceforge.net:/cvsroot/moodle co moodle

> > > El comando es similar para otros módulos CVS:

> > > cvs -z3 -d:ext:miusuario@cvs.sourceforge.net:/cvsroot/moodle co contrib

> > > No intentes ejecutar este primer comando CVS sobre una instalación existente de Moodle: empieza con un directorio vacío.

> > > Cada vez que ejecutes un comando CVS se te preguntará micontraseña a no ser que configures las claves autorizadas.

> > > Ahora, deberías tener un nuevo directorio 'moodle'. Puedes renombrarlo y moverlo donde quieras. Entra en él:

> > > cd moodle

> > > Todos los ficheros de Moodle deberían estar ahí. Ahora puedes modificarlos localmente. Para comparar tus ficheros y directorios con los que existen en la copia principal del servidor CVS utiliza cvs diff, p.ej.:

> > > cvs diff -c config-dist.php
> > > cvs diff -c lang

> > > Para obtener las últimas actualizaciones desde el servidor utiliza:

> > > cvs update -dP

> > > Para copiar tus nuevos ficheros de vuelta al servidor deberías hacer algo como:

> > > cd lang/ca
> > > cvs commit

> > > Se te requerirá que añadas algunos comentarios sobre los cambios (depende de tu editor de texto por defecto) ... escribe algún comentario con significado y cierra el editor ... los ficheros serán enviados a Sourceforge y almacenados allí. ¡Hecho!

> > > Para ahorrar algo de tiempo, puedes poner algunos argumentos por defecto en un fichero llamado .cvsrc en tu directorio. Por ejemplo, el mío contiene:

> > > diff -c
> > > update -dP

> > > Utiliza 'cvs help' para obtener más información...

> > ### 3.2 CVS en Windows

> > > En primer lugar necesitas descargas una copia nueva de Moodle utilizando tu cuenta de desarrollador:

> > 1. Descarga TortoiseCVS desde tortoisecvs.org e instálalo, entonces reinicia.
> > 2. Busca o crea una carpeta en la que quieras que Moodle sea descargado.
> > 3. Seleciónala con el botón derecho del ratón y selecciona "CVS Checkout" en el menú. Verás una caja de diálogo.
> > 4. Copia este texto en el campo CVSROOT (¡utilizando tu propio nombre de usuario!):

> >         :ext:miusuario@cvs.sourceforge.net:/cvsroot/moodle

> > 5. En el campo "Module", teclea "moodle" para obtener la última versión de Moodle, "contrib" para obtener el directorio de contribuciones , o"mysql" para descargar el módulo MySQL Admin.
> > 6. Selecciona el botón"OK" y todo debería ser descargado.

> > > Un diálogo debería mostrarte todos los ficheros que están siendo descargados y, tras un rato, deberías tener una copia completa de Moodle. Después de esta primera descarga (checkout) puedes obtener los últimos cambios desde el servidor CVS:

> > 1. Con el botón derecho del ratón encima de tu carpeta Moodle (o de cualquier otro fichero) selecciona "CVS Update".
> > 2. Siéntate y examina los registros atentamente. Apunta los conflictos que pudieran aparecer si has realizado modificaciones en tu copia local que entran en conflicto con cambios en las versiones que te estás descargando - necesitarás editar estos ficheros y resolver los conflictos manualmente.

> > > Después de modificar ficheros (notarás que sus iconos cambian de verde a rojo) puedes enviar esos cambios al servidor CVS así:

> > 1. Con el botón derecho del ratón encima de tu carpeta Moodle (o de cualquier otro fichero) selecciona "CVS Commit...".
> > 2. En el diálogo que aparece, introduce una descripción clara de los cambios que estás enviando.
> > 3. Selecciona "OK". Tus cambios serán enviados al servidor.

> ## 4. Trabajando con ramas

> > Este diagrama te muestra como el módulo moodle se divide en diferentes ramas (branches) a lo largo del tiempo.

> > Para ver todas las etiquetas y ramas existentes que están disponibles, utiliza este comando en cualquier fichero antiguo (como el index.php en el directorio principal de Moodle):

> > cvs status -v index.php

> > Algunas instrucciones sobre las etiquetas (tags):

> > - Los nombres de las etiquetas y de las ramas siempre deben ser escritos en mayúsculas.
> > - Las etiquetas y las ramas deben ser SIEMPRE aplicadas a todo el módulo (todo Moodle). No crees etiquetas para ficheros o carpetas individuales.
> > - No permitimos renombrar etiquetas porque muchas personas las utilizan, así que ¡créalas bien la primera vez!

> > ### 4.1 Desarrollando en el tronco (trunk)

> > > El Tronco del CVS es la versión de desarrollo principal de Moodle. En CVS también es conociddo como el HEAD, o rama por defecto (default branch).

> > > Los desarrolladores de Moodle intentan mantenerlo tan estable como es posible, pero normalmente contiene nuevo código con errores y pequeñas inestabilidades.

> > > En cuaquier momento podemos decidir que el producto tiene las funcionalidades necesarias para publicar una nueva versión. En ese momento, el tronco es marcado con una etiqueta MOODLE_XX_BETA (por si en algún momento queremos volver a ese punto) y una nueva rama es creada para esa versión con el nombre MOODLE_XX_STABLE.

> > > En ese momento, un paquete Beta es también publicado - es para los usuario que no utilizan el CVS pero quieren comprobar las nuevas funcionalidades y ayudar en la detección de errores.

> > ### 4.2 Ramas (branches) estables para cada versión

> > > En cuanto la rama estable MOODLE_XX_STABLE es creada, los esfuerzos de los desarrolladores se dividirán en dos objetivos durante cierto tiempo. Algunas personas continuarán trabajando en nuevas funcionalidades en el tronco para la próxima versión, pero la mayoría de nosotros nos concentraremos en utilizar la rama STABLE y solucionar los problemas que sean encontrados en ella.

> > > Puedes cambiar tu copia local de Moodle a la rama STABLE utilizando el siguiente comando en Unix desde tu directorio base de Moodle:

> > > cvs update -dP -r MOODLE_XX_STABLE

> > > Después de esto, todos los comando descritos anteriormente serán aplicados a la rama estable. Para volver al tronco, simplemente teclea:

> > > cvs update -dPA

> > > En clientes Windows debería tener un menú en el que puedes seleccionar la rama que deseas.

> > > Una vez que la rama STABLE realmente se estabiliza, una versión oficial puede ser creada. Se crean los paquetes necesarios para la distribución y la rama es marcada (por Martin) con una etiqueta llamada MOODLE_XXX

> > > Periódicamente, los problemas solucionados en la rama STABLE deben ser combinados (merge) con el tronco para que también sean solucionados para futuras versiones de Moodle. Una etiqueta flotante llamada MOODLE_XX_MERGED debe ser mantenida para marcar el punto en el que se realizó la última combinación. El procedimiento para realizar dicha combinación es el siguiente:

> > > 1. Obtén la última version del tronco:
> > >    cvs update -dPA
> > > 2. Combina todo desde la rama desde la última combinación, en el tronco:
> > >    cvs update -kk -j MOODLE_XX_MERGED -j MOODLE_XX_STABLE
> > > 3. Observa atentamente los registros para ver si se producen conflictos, y soluciona cada fichero que veas que presenta problemas.
> > > 4. Guarda (commit) los cambios de la combinación en el tronco CVS:
> > >    cvs commit
> > > 5. Vuelve a la rama:
> > >    cvs update -dPr MOODLE_XX_STABLE
> > > 6. Actualiza la etiqueta flotante para que todo este proceso pueda desarrollarse la próxima vez:
> > >    cvs tag -RF MOODLE_XX_MERGED

> > > Por último, los valores de la variable $version en todos los ficheros version.php de Moodle en la ramas NO deben ser actualizados en la medida de lo posible (excepto el último dígito si es verdaderamente necesario). La razón para ésto es que alguien actualizándose desde una versión estable a la siguiente podría perder actualizaciones de la base de datos que hayan sucedido en el tronco.

> > ### 4.3 Ramas de funcionalidades para grandes cambios

> > > De vez en cuando, puede haber alguna funcionalidad que necesita estar controlada para que distintas personas puedan trabajar en ella, pero que es muy inestable para ser incluida en el tronco de desarrollo.

> > > En estos casos, una rama temporal es creada para trabajar en la funcionalidad y, tan pronto como sea posible, combinarla con el tronco de nuevo. En el diagrama mostrado anteriormente se ha incluido un ejemplo llamado MOODLE_14_WIDGET de este tipo de rama.

> > > Si necesitas hacer esto para tu nueva WIDGET, sige estos pasos:

> > > 1. ¡Discútelo con otros desarrolladores para estar seguro de que es realmente necesaria!
> > > 2. Crea una nueva etiqueta en el tronco (para todo Moodle) llamada MOODLE_XX_WIDGET_PRE
> > >    cvs tag -R MOODLE_XX_WIDGET_PRE
> > > 3. Crea tu rama llamada MOODLE_XX_WIDGET
> > >    cvs tag -Rb MOODLE_XX_WIDGET
> > > 4. Trabaja en esa rama hasta que la funcionalidad sea razonablemente estable. Envia los cambios al servidor CVS cuando estimes oportuno:
> > >    cvs commit
> > > 5. Cuando la funcionalidad esté lista, combina toda la rama en el tronco, soluciona los posibles conflictos, guárdala en el tronco y abandona la rama:
> > >    cvs update -dPA
> > >    cvs update -kk -j MOODLE_XX_WIDGET
> > >    cvs commit

> ¡Buena suerte, ten cuidado y diviértete!

Documentación de Moodle

Version: $Id$