2. Plan de estudios en un colegio

Empleando clasificaciones, secuencias y el sistema de archivos puede organizarse el plan de estudios de un colegio. Una posible organización en directorios se esboza a continuación, es apropiada para mantener información de varios años en un colegio de acuerdo a la legislación colombiana vigente:

       2004
          bprimaria
            1
              castellano.sec ,  castellano.cla, castellano.def
              dh.sec ,  dh.cla, dh.def
              dibujo.sec ,  dibujo.cla, dibujo.def
              edufisica.sec ,  edufisica.cla, edufisica.def
              matematicas.sec ,  matematicas.cla, matematicas.def
              musica.sec ,  musica.cla, musica.def
              naturales.sec ,  naturales.cla, naturales.def
              religion.sec ,  religion.cla, religion.def
              sociales.sec ,  sociales.cla, sociales.def
              trabajomanual.sec ,  trabajomanual.cla, trabajomanual.def
            2
              ...
            3
            4
            5
          bsecundaria
              ...
          media
              ...
       2003
          bprimaria 
          bsecundaria
          media
       ...
     

Que se podría crear a partir del plan de estudios completo incluido entre los ejemplos de repasa (ver directorio ejemplos/planest o http://structio.sourceforge.net/repasa/planest), bien copiandolo para adaptarlo respetando los créditos o bien con comandos como:

mkdir planest
cd planest
mkdir 2004
cd 2004
mkdir bprimaria bsecundaria media
cd bprimaria
mkdir 1 2 3 4 5
cd ../bsecundaria
mkdir 6 7 8 9
cd ../media
mkdir 10 11
     

y que podría completarse con los archivos creados por los profesores de cada asignatura en cada grado. Un archivo de clasificaciones tendrá los logros e indicadores de una asignatura en un grado, posiblemente con ejercicios, ejemplos y referencias a definiciones importantes consignadas en el archivo de definiciones correspondiente. Por su parte el archivo de secuencia separará en los 4 periodos los indicadores del archivo de clasificaciones correspondiente.

Además de logros e indicadores, en los archivos de clasificaciones puede incluir información adicional empleando anotaciones. Por ejemplo si un indicador en un archivo de clasificaciones no es recuperable después de la descripción (y antes de cerrar el elemento clasif) puede agregar una anotación como:

	     <anota tipo="Recuperable" valor="no"></anota>
	   

2.1. Edición

Para la edición de archivos de clasificaciones y secuencias podría emplear un editor de texto como vim o emacs. Desde ambos podrá ejecutar repchq y el corrector de ortografía para verificarlos sintáctica y ortográficamente (o mejor con un Makefile, ver Sección 2.4, “Automatización”). Dado que la convención para presentar errores de repchq es estándar, desde ambos editores se pueden localizar errores rápidamente.

También podrían editarse empleando las herramientas edcla y edsec. La primera permite añadir o eliminar una clasificación o anotaciones a un archivo de clasificaciones. La segunda permite añadir o eliminar una referencia a una clasificación en un archivo de secuencia. Si deseara añadir un indicador al logro con identificación establece del ejemplo de clasificaciones que se ha visto podría emplear:

	     edcla ejsimple.cla "añadir" "Indicador" "establece.esperanza" \
	     "Considere la muerte, ¿En algún mensaje de Jesús encuentra esperanza?"
	   

Puede consultar la sintaxis de uso de estos programas en las páginas del manual edcla(1), edsec(1)

2.2. Generación de archivos HTML con plan de estudios

En la sección Sección 1.2, “Convirtiendo a HTML con XSLT” se presentó la forma de generar un HTML a partir de un archivo de secuencia y su archivos asociados. Puede crearse un script que genere toda la información del plan de estudios en archivos HTML. En el directorio ejemplos/planest encontrará uno que realiza esta labor. Puede emplearlo para generar archivos HTML del plan de estudios del 2004 en el directorio /var/www/htdocs/plan con:

cd planest
./genhtml.sh /var/www/htdocs/plan 2004
	   

2.3. Consideraciones sobre la integridad

En un servidor tipo Unix (como OpenBSD o Linux) una organización de archivos como esta junto con una convención en permisos puede facilitar mantener la integridad de los archivos, es decir buscar que cada archivo sólo pueda ser modificado por el profesor de la materia en el grado correspondiente.

Tal como se sugiere en la plataforma de referencia S-Helio 1.1, cada profesor puede tener una cuenta personal y puede haber un grupo profesor el cual sería el grupo de la jerarquía completa y el grupo principal de las cuentas de los profesores. A continuación se ejemplifica como se crearía el grupo y cuentas para dos profesores en un sistema OpenBSD:

	 groupadd -v -g 1102 profesor
	 useradd -m -g profesor -c "Pepe Suarez" -s /bin/ksh pepsub
	 useradd -m -g profesor -c "Jeremías Gonzáles" -s /bin/ksh jergon
       

Cada profesor debería poder modificar sus archivos en el servidor (por ejemplo mediante NIS o vía ssh). Los archivos que deba mantener cada profesor serán de su propiedad y tendrán permisos así:

  • Sin permiso alguno para otros.

  • Con permiso de lectura para profesores (y de ejecución en el caso de directorios), pero no de escritura.

  • Con permiso de lectura y escritura para el propietario (y de ejecución en el caso de directorios).

Desde el directorio planest del ejemplo anterior el administrador podría establecer los permisos con:

chmod -R o-xrw,g+r-w,u+rw .
find . -type d -exec chmod gu+x {} ";"
       

También tendría que dejar como propietario de cada archivo el profesor a cargo. Por ejemplo si el usuario pepsub es responsable de castellano en 1:

cd 2004/bprimaria/1
chown pepsub:profesor castellano.*
       

Este esquema permite modificar la estructura sólo al administrador, ver el plan de estudios sólo a quienes estén en el grupo profesor y al administrador (privacidad) y sólo al profesor responsable de cada materia y al administrador modificar la información.

Además de este esquema de permisos, de ser posible es mejor que el servidor donde se almacene la información no pueda ser accedido por personas que no estén el grupo profesor. Por ejemplo puede haber una red interna sólo para profesores, conectada al resto de redes por intermedio de un contrafuegos.

2.4. Automatización

Pueden crearse Makefiles y scripts para el interprete de comandos en diversos directorios del plan de estudios. Pueden servir para:

  • Configurar permisos y propietarios de archivos. Desde el directorio con el plan de estudios un profesor podría ejecutar un script para esto, digamos:

    ./perm.sh
  • Que un profesor valide sus archivos de definiciones, clasificaciones y secuencias ejecutando

    make 

    y que pueda limpiar archivos temporales de la validación con:

    make limpia

    Así cuando el profesor a cargo, edite planest/2004/bprimaria/1/castellano.cla, podría ejecutar make desde el editor[11] para validar, y eventualmente desde el mismo editor localizar rápidamente errores[12].

  • Que el administrador pueda validar todos los archivos del plan de estudios. Para esto desde el directorio planest (con la nomenclatura usada) podría ejecutar:

    make 

    o tal vez redireccionando errores a un archivo err, para examinarlo:

    make 2> err 

    Y que pueda limpiar archivos temporales de la validación con:

    make limpia

En el directorio principal (planest) podría emplearse el siguiente Makefile:

# Makefile para verificar toda la estructura de directorios de un
# plan de estudios.  Dominio público. http://structio.sourceforge.net/repasa


valida:
	m=`find . -name Makefile`; \
	for i in $$m ; do \
	  f=`dirname $$i`; \
	  if (test "$$f" != ".") then { \
	  	echo "Directorio $$f"; \
		(cd $$f; make valida); \
		if (test "$$?" != "0") then { exit 1; } fi; \
	  } fi; \
	done

limpia:
	m=`find . -name Makefile`; \
	for i in $$m ; do \
	  f=`dirname $$i`; \
	  if (test "$$f" != ".") then { \
	    echo "Directorio $$f"; \
	    (cd $$f; make limpia); \
	   } fi; \
	 done



 

Su propietario y permisos podrían establecerse con:

chown root:profesor Makefile
chmod -R o-xrw,g+r-w,u+rw Makefile

También en el directorio principal podría usarse el siguiente script perm.sh, que sigue las convenciones de la sección anterior y de esta para establecer permisos y propietarios.


#!/bin/sh
# Script para establecer permisos y propietarios en un plan de estudios
# para  repasa. Dominio público.

chgrp -R profesor *
chown root:profesor Makefile perm.sh
chmod -R o-xrw,g+r-w,u+rw .
chmod 4750 perm.sh
find . -type d -exec chmod gu+x {} ";"
p=`pwd`;
m=`find . -name perm.sh -user root -group profesor -perm 4750`;
for i in $m ; do 
	f=`dirname $i`; 
	if (test "$f" != ".") then { 
		echo $f; 
		cd $f; 
		./perm.sh; 
		cd $p;
	} fi; 
done;


 

Para que todo profesor pueda ejecutarlo debería tener el bit SUID activo:

chown root:profesor perm.sh
chmod 4750 perm.sh

En el directorio de cada grado, podría haber un Makefile como el siguiente (con el mismo propietario y permisos del Makefile en el directorio planest, como es el mismo para todos los grados podrían emplearse enlaces):



# Para verificar archivos de plan de estudio
# Dominio público. 2004. http://structio.sourceforge.net/repasa
# Suponemos que además de un interprete de comandos como ksh o bash, pueden 
# usarse los programas POSIX: make, touch, grep, sed, ls, whoami

REPCHQ=repchq -e

valida:
	u=`whoami`; \
	if (test "$$u" = "root") then { \
		make valida-root; \
	} else { \
		make valida-prof;\
	} fi;

valida-root:
	err=0;u=`whoami`;\
	a=`find . "(" -name "*cla" -or -name "*sec" -or -name "*def" ")"| \
	  sed -e "s/[.]cla/.claok/g;s/[.]sec/.secok/g;s/[.]def/.defok/g"`; \
	if (test "$$a" != "") then { make $$a; } fi;

valida-prof:
	err=0;u=`whoami`; \
	a=`find . -user "$$u" -and "(" -name "*cla" -or -name "*sec" -or -name "*def" ")"| \
	  sed -e "s/[.]cla/.claok/g;s/[.]sec/.secok/g;s/[.]def/.defok/g"`; \
	if (test "$$a" != "") then { make $$a; } fi;
	

.SUFFIXES: .cla .claok .def .defok .sec .secok

.cla.claok:
	$(REPCHQ) -j "Logro;Indicador" $<
	touch $@

.def.defok:
	$(REPCHQ) $<
	touch $@

.sec.secok:
	$(REPCHQ) -j "Periodo" $<
	touch $@

limpia:
	u=`whoami`; \
	if (test "$$u" = "root") then { \
		make limpia-root; \
	} else { \
		make limpia-prof; \
	} fi;

limpia-prof:
	u=`whoami`;a=`ls -l *ok | grep "$${u}[         ]*profesor " | \
	  sed -e "s/.* [0-9]*:[0-9]* \(.*\)$$/\1/g"`; \
	echo $$a; \
	for i in $$a ; do \
		echo $$i; rm -f $$i; \
	done;

limpia-root:
	rm -f *ok


 

y un script perm.sh que establezca los permisos y propietarios de los archivo en un año:


#!/bin/sh
# Establece permisos y propietarios de archivos en plan de estudios
# usando materias de ejemplo con profesor ejemplo pepsub y jergon

chgrp -R profesor . 
chown root:profesor perm.sh
chmod -R o-xrw,g+r-w,u+rw ..
chmod 4750 perm.sh
find . -type d -exec chmod gu+x {} ";"

#1
chown pepsub:profesor ../../planest/2004/bprimaria/1/castellano.* ../../planest/2004/bprimaria/1/comportamiento.* ../../planest/2004/bprimaria/1/dh.* ../../planest/2004/bprimaria/1/dibujo.* ../../planest/2004/bprimaria/1/edufisica.* ../../planest/2004/bprimaria/1/matematicas.* 
chown jergon:profesor  ../../planest/2004/bprimaria/1/musica.* ../../planest/2004/bprimaria/1/naturales.* ../../planest/2004/bprimaria/1/religion.* ../../planest/2004/bprimaria/1/sociales.* ../../planest/2004/bprimaria/1/trabajomanual.*
chmod o-rxw,g+r-w,u+rw bprimaria/1/*.{cla,sec}

#2
chown pepsub:profesor ../../planest/2004/bprimaria/2/castellano.* ../../planest/2004/bprimaria/2/comportamiento.* ../../planest/2004/bprimaria/2/dh.* ../../planest/2004/bprimaria/2/dibujo.* ../../planest/2004/bprimaria/2/edufisica.* ../../planest/2004/bprimaria/2/ ../../planest/2004/bprimaria/2/matematicas.* 
chown jergon:profesor ../../planest/2004/bprimaria/2/ ../../planest/2004/bprimaria/2/musica.* ../../planest/2004/bprimaria/2/naturales.* ../../planest/2004/bprimaria/2/religion.* ../../planest/2004/bprimaria/2/sociales.* ../../planest/2004/bprimaria/2/trabajomanual.*
chmod o-rxw,g+r-w,u+rw bprimaria/2/*.{cla,sec}

#3
chown pepsub:profesor ../../planest/2004/bprimaria/3/castellano.* ../../planest/2004/bprimaria/3/comportamiento.* ../../planest/2004/bprimaria/3/dh.* ../../planest/2004/bprimaria/3/dibujo.* ../../planest/2004/bprimaria/3/edufisica.* ../../planest/2004/bprimaria/3/ingles.* ../../planest/2004/bprimaria/3/informatica.* ../../planest/2004/bprimaria/3/matematicas.* 
chown jergon:profesor ../../planest/2004/bprimaria/3/ ../../planest/2004/bprimaria/3/musica.* ../../planest/2004/bprimaria/3/naturales.* ../../planest/2004/bprimaria/3/religion.* ../../planest/2004/bprimaria/3/sociales.* ../../planest/2004/bprimaria/3/trabajomanual.*
chmod o-rxw,g+r-w,u+rw bprimaria/3/*.{cla,sec}

#4
chown pepsub:profesor ../../planest/2004/bprimaria/4/castellano.* ../../planest/2004/bprimaria/4/dh.* ../../planest/2004/bprimaria/4/dibujo.* ../../planest/2004/bprimaria/4/edufisica.* ../../planest/2004/bprimaria/4/ingles.* ../../planest/2004/bprimaria/4/informatica.* ../../planest/2004/bprimaria/4/matematicas.* 
chown jergon:profesor ../../planest/2004/bprimaria/4/ ../../planest/2004/bprimaria/4/musica.* ../../planest/2004/bprimaria/4/naturales.* ../../planest/2004/bprimaria/4/religion.* ../../planest/2004/bprimaria/4/sociales.* ../../planest/2004/bprimaria/4/trabajomanual.*
chmod o-rxw,g+r-w,u+rw bprimaria/4/*.{cla,sec}

#5
chown pepsub:profesor ../../planest/2004/bprimaria/5/castellano.* ../../planest/2004/bprimaria/5/comportamiento.* ../../planest/2004/bprimaria/5/dh.* ../../planest/2004/bprimaria/5/dibujo.* ../../planest/2004/bprimaria/5/edufisica.* ../../planest/2004/bprimaria/5/ingles.* ../../planest/2004/bprimaria/5/informatica.* ../../planest/2004/bprimaria/5/matematicas.* 
chown jergon:profesor ../../planest/2004/bprimaria/5/ ../../planest/2004/bprimaria/5/musica.* ../../planest/2004/bprimaria/5/naturales.* ../../planest/2004/bprimaria/5/religion.* ../../planest/2004/bprimaria/5/sociales.* ../../planest/2004/bprimaria/5/trabajomanual.*
chmod o-rxw,g+r-w,u+rw bprimaria/5/*.{cla,sec}

#6
chown pepsub:profesor ../../planest/2004/bsecundaria/6/arte.* ../../planest/2004/bsecundaria/6/biologia.* ../../planest/2004/bsecundaria/6/castellano.* ../../planest/2004/bsecundaria/6/comportamiento.* ../../planest/2004/bsecundaria/6/dh.* ../../planest/2004/bsecundaria/6/edufisica.* ../../planest/2004/bsecundaria/6/ingles.* ../../planest/2004/bsecundaria/6/matematicas.*
chown jergon:profesor ../../planest/2004/bsecundaria/6/ ../../planest/2004/bsecundaria/6/religion.* ../../planest/2004/bsecundaria/6/programacion.* ../../planest/2004/bsecundaria/6/sociales.* 
chmod o-rxw,g+r-w,u+rw bsecundaria/6/*.{cla,sec}

#7
chown pepsub:profesor ../../planest/2004/bsecundaria/7/arte.* ../../planest/2004/bsecundaria/7/biologia.* ../../planest/2004/bsecundaria/7/castellano.* ../../planest/2004/bsecundaria/7/comportamiento.* ../../planest/2004/bsecundaria/7/dh.* ../../planest/2004/bsecundaria/7/edufisica.* ../../planest/2004/bsecundaria/7/ingles.* ../../planest/2004/bsecundaria/7/matematicas.* 
chown jergon:profesor ../../planest/2004/bsecundaria/7/ ../../planest/2004/bsecundaria/7/religion.* ../../planest/2004/bsecundaria/7/programacion.* ../../planest/2004/bsecundaria/7/sociales.* 
chmod o-rxw,g+r-w,u+rw bsecundaria/7/*.{cla,sec}

#8
chown pepsub:profesor ../../planest/2004/bsecundaria/8/arte.* ../../planest/2004/bsecundaria/8/biologia.* ../../planest/2004/bsecundaria/8/castellano.* ../../planest/2004/bsecundaria/8/comportamiento.* ../../planest/2004/bsecundaria/8/dh.* ../../planest/2004/bsecundaria/8/edufisica.* ../../planest/2004/bsecundaria/8/ingles.* ../../planest/2004/bsecundaria/8/matematicas.*
chown jergon:profesor ../../planest/2004/bsecundaria/8/ ../../planest/2004/bsecundaria/8/religion.* ../../planest/2004/bsecundaria/8/programacion.* ../../planest/2004/bsecundaria/8/sociales.*
chmod o-rxw,g+r-w,u+rw bsecundaria/8/*.{cla,sec}

#9
chown pepsub:profesor ../../planest/2004/bsecundaria/9/arte.* ../../planest/2004/bsecundaria/9/biologia.* ../../planest/2004/bsecundaria/9/castellano.* ../../planest/2004/bsecundaria/9/comportamiento.* ../../planest/2004/bsecundaria/9/dh.* ../../planest/2004/bsecundaria/9/edufisica.* ../../planest/2004/bsecundaria/9/ingles.* ../../planest/2004/bsecundaria/9/matematicas.*
chown jergon:profesor ../../planest/2004/bsecundaria/9/ ../../planest/2004/bsecundaria/9/religion.* ../../planest/2004/bsecundaria/9/programacion.* ../../planest/2004/bsecundaria/9/sociales.*
chmod o-rxw,g+r-w,u+rw bsecundaria/9/*.{cla,sec}

#10
chown pepsub:profesor ../../planest/2004/media/10/aleman.* ../../planest/2004/media/10/arte.* ../../planest/2004/media/10/castellano.* ../../planest/2004/media/10/democracia.* ../../planest/2004/media/10/comportamiento.* ../../planest/2004/media/10/comportamiento.* ../../planest/2004/media/10/dh.* ../../planest/2004/media/10/edufisica.* ../../planest/2004/media/10/fisica.* ../../planest/2004/media/10/filosofia.* ../../planest/2004/media/10/matematicas.*
chown jergon:profesor ../../planest/2004/media/10/ ../../planest/2004/media/10/religion.* ../../planest/2004/media/10/programacion.* ../../planest/2004/media/10/quimica.*
chmod o-rxw,g+r-w,u+rw media/10/*.{cla,sec}

#11
chown pepsub:profesor ../../planest/2004/media/11/aleman.* ../../planest/2004/media/11/arte.* ../../planest/2004/media/11/castellano.* ../../planest/2004/media/11/democracia.* ../../planest/2004/media/11/comportamiento.* ../../planest/2004/media/11/dh.* ../../planest/2004/media/11/edufisica.* ../../planest/2004/media/11/fisica.* ../../planest/2004/media/11/filosofia.* ../../planest/2004/media/11/matematicas.*
chown jergon:profesor ../../planest/2004/media/11/ ../../planest/2004/media/11/religion.* ../../planest/2004/media/11/programacion.* ../../planest/2004/media/11/quimica.*
chmod o-rxw,g+r-w,u+rw media/11/*.{cla,sec}



 

2.5. Consideraciones sobre el control de versiones

Para facilitar el trabajo en grupo y controlar versiones, recomendamos emplear CVS. Puede ser dejando el repositorio en el mismo servidor para profesores o para mayor respaldo en otro servidor de la red interna de profesores.

Suponiendo que en el servidor ya está instalado CVS habría que realizar tres tipos de actividades:

  • El administrador configura un repositorio para el plan de estudios.

  • Cada profesor trabaja sus porciones del plan de estudio en una copia local y actualiza periodicamente el repositorio.

  • Periodicamente el administrador realiza labores. Por ejemplo al finalizar cada periodo agrega un tag para marcar estado y poderlo recuperar en el futuro si se requiere.

Aunque en esta sección se dan ejemplos de como emplear CVS para estas actividades, sugerimos antes consultar documentación sobre CVS en las secciones correspondientes de [AA1.1] o en [CVS]

2.5.1. Configuración del servidor CVS

El repositorio puede ser creado por el administrador, digamos en /var/colegio-cvs con:

	   export CVSROOT=/var/cvs-colegio
	   export CVS_RSH=ssh
	   cd /var
	   mkdir cvs-colegio
	   cd cvs-colegio
	   cvs init
	 

Después puede agregar un módulo con un plan de estudios con la estructura deseada y parcialmente lleno. Suponiendo que el plan de estudios está en el directorio /home/pepsub/planest[13] se añade el módulo y se configuran sus permisos con:

	   export CVSROOT=/var/cvs-colegio
	   export CVS_RSH=ssh
	   cd /home/pepsub/planest
	   cvs -z3 import planest vendor start
	   cd /var/cvs-colegio/planest
	   chgrp -R profesor .
	   chmod -R o-xrw .
	 

Dado que CVS puede cambiar el propietario de los archivos en el repositorio, no resulta útil configurar más detalles en los permisos y usuarios del repositorio. Hay otra alternativa que se presenta más adelante (ver Sección 2.5.4, “Mas ayudas para automatizar”).

2.5.2. Actualización del repositorio

Tras la configuración del repositorio cada profesor podría sacar su copia local del plan de estudios completo junto con los Makefile y scripts para facilitar edición y validación. Note que antes de sacar su copia local debe asegurarse de no tener un directorio con el mismo nombre del módulo (e.g. planest), después podría ejecutar:

	   export CVSROOT=/var/cvs-colegio
	   export CVS_RSH=ssh
	   cd ~
	   cvs -z3 co planest
	 

y el administrador podria permitirle cuadrar permisos (con el script perm.sh) ejecutando:

	   cd planest
	   find . -name perm.sh -exec chown root:profesor {} ";" 
	   find . -name perm.sh -exec chmod 4750 {} ";" 
	   ./perm.sh
	 

Después de sacar la copia local (que sólo requiere hacerse una vez), cada profesor podría editar, validar y actualizar en el respositorio los archivos que le corresponden. La actualización en el repositorio es muy importante porque con esto, indicará al administrador que usted está avanzando o que ha completado una meta en la edición de sus logros e indicadores (por ejemplo indicaría que terminó de escribir y validar logros e indicadores de un periodo).

Primero actualice su copia local con los cambios recientes en el repositorio (eventualmente el administrador puedo haber corregido sus archivos):

export CVSROOT=/var/cvs-colegio
export CVS_RSH=ssh
cvs -z3 update -Pd
	 

Después de editar y validar (digamos sus archivos del directorio ~/planest/2004/bprimaria/1) puede actualizar el repositorio con sus modificaciones emplenado:

	   export CVSROOT=/var/cvs-colegio
	   export CVS_RSH=ssh
	   cd ~/planest/2004/bprimaria/1
	   cvs commit -m "Logros e indicadores del primer periodo"
	 

Poniendo un comentario descriptivo del cambio que está actualizando en lugar de 'Logros e indicadores del primer periodo'.

Para evitar tener que establecer las variables CVSROOT y CVS_RSH cada vez que desee usar cvs, puede agregar estas líneas al archivo de configuración de su interprete de comandos (por ejemplo .profile si usa ksh o .bash_profile si usa bash):

export CVSROOT=/var/cvs-colegio
export CVS_RSH=ssh

2.5.3. Procedimientos periódicos con el repositorio

Cada vez que en el repositorio se completa una meta importante, puede ser apropiado dejar una "marca[14]" en el que permita recuperar la versión marcada, por ejemplo al finalizar un periodo, cuando todos los logros e indicadores han sido ingresados. Suponiendo que el administrador quisiera marcar la versión que hay en un instante con la marca 'p2004-1', desde su copia local del repositorio ejecutaría:

cvs rtag 'p2004-1' planest
	 

Posterioremente si desea recuperar la versión marcada del módulo planest puede usar:

cd tmp
cvs co -r p2004-1 planest
	 

Tenga en cuenta que la versión que recupere así quedará con una "marca pegajosa"[15]. que hará que CVS la diferencie de la versión más reciente.

2.5.4. Mas ayudas para automatizar

Es posible configurar CVS para que antes de actualizar el repositorio, verifique que el usuario pueda modificar los archivos que va a actualizar (en caso de que no haya ejecutado el script para establecer permisos i.e perm.sh). De esta forma sólo quien esté autorizado para modificar un archivo podrá ingresarlo al CVS. En esta sección se presenta como puede hacerse esta configuración suponiendo que la copia local de cada profesor está en el mismo computador donde está el repositorio (consideramos que es posible que funcione también con el método ssh, pero no con pserver).

CVS puede configurarse para ejecutar un script antes de realizar un commit, esta configuración se hace en el archivo commitinfo del directorio CVSROOT del repositorio. Para obtener una copia de ese directorio ejecute:

cd tmp
export CVSROOT=/var/cvs-colegio
cvs co CVSROOT
	 

Después pase al directorio CVSROOT obtenido y edite el archivo commitinfo, agregando al final una línea como la siguiente:

^planest        /usr/local/bin/chqperm.sh 
	 

la cual especifica que antes de hacer actualizaciones a un módulo que comience con planest debe ejecutarse el script /usr/local/bin/chqperm.sh.

El script /usr/local/bin/chqperm.sh puede adaptarlo para su caso a partir del siguiente. Note que este script supone la nomenclatura hasta ahora presentada y que cada profesor tendrá en su directorio personal (e.g /home/pepsub) el directorio planest con su copia local del repositorio:


# Chequea permisos y verifica archivos por actualizar en el repositorio CVS.
# Para ser usado desde CVSROOT/commitinfo
# Dominio público. Sin garantías. 2003. http://structio.sourceforge.net/repasa

usuario=`whoami`
echo "Chequeando permisos y verificando. Usuario: $usuario" 
dir=$1
shift
arch="$*"
for f in "$arch" ; do
	exst=1;
	n=$dir/$f;
	echo $n;
	if (test "$usuario" = "root") then {
		exst=0;
	} elif (test "$usuario" = "pepsub") then {
		case $n in 
			*planest/2004/bprimaria/1/castellano.*) exst=0;;
			*planest/2004/bprimaria/1/comportamiento.*) exst=0;;
			*planest/2004/bprimaria/1/dibujo.*) exst=0;;
			*planest/2004/bprimaria/1/edufisica.*) exst=0;;
			*planest/2004/bprimaria/1/dh.*) exst=0;;
			*planest/2004/bprimaria/1/matematicas.*) exst=0;;
		esac
	} elif (test "$usuario" = "jergon") then {
		case $n in
			*planest/2004/bprimaria/1/musica.*) exst=0;;
			*planest/2004/bprimaria/1/naturales.*) exst=0;;
			*planest/2004/bprimaria/1/religion.*) exst=0;;
			*planest/2004/bprimaria/1/sociales.*) exst=0;;
			*planest/2004/bprimaria/1/trabajomanual.*) exst=0;;
		esac
	} fi;
	if (test "$exst" != "0") then {
		echo "No puede escribir '$n'";
		exit 1;
	} fi;
	dirloc=`echo $dir | sed -e "s|.*planest/\(.*\)|/home/$usuario/planest/\1|g"`;
	nloc=$dirloc/$f;
	repchq -D $dirloc $nloc
	if (test "$?" != "0") then {
		echo "Problemas verificando";
		exit 1;
	} fi;
done;

exit 0;


	 



[11] Desde vim puede ejecutarse con :make

[12] Desde vim, después de ejecutar make quedará en el primer error y podrá pasar al siguiente con :cn

[13] Antes de crear el repositorio es recomendable eliminar los archivos que no se deban agregar o incluirlos en un archivo /home/pepsub/planest/.cvsignore. de emplear los Makefile de la sección anterior, tal archivo podría incluir:

	       *ok	     
	     

[14] En inglés tag

[15] En inglés sticky tag.