Node:Los Ficheros commitinfo y loginfo y rcsinfo, Next:, Previous:El Fichero modules, Up:El directorio administrativo CVSROOT/



Los Ficheros commitinfo y loginfo y rcsinfo

La mayoría de los demás ficheros de administración proporcionan puntos de comtrol ("hooks", N. del T.) programáticos en varias partes del proceso de envío de cambios (por ejemplo, la capacidad de validar informes de cambios o estados de fichero antes de permitir el envío, o la capacidad de notificar a un grupo de desarrolladores cada vez que se haga un envío en cierto directorio del repositorio).

Por lo general, los ficheros comparten una sintaxis común. Cada línea es de la forma:

EXPRESIÓN_REGULAR    PROGRAMA_A_EJECUTAR

La expresión regular se probará con el directorio en el que se está haciendo el envío (con el nombre de directorio relativo al nivel más alto del repositorio). Si coincide se ejecutará el programa designado. Al programa se le pasarán los nombres de cada uno de los ficheros del envío; puede hacer lo que le parezca con esos nombres, incluso abrir los ficheros y examinar sus contenidos. Si el programa devuelve un estado de salida distinto de cero, se impide que se haga el envío.

Las (expresiones regulares son un sistema para describir de forma concisa clases de cadenas. Si no está familiarizado con las expresiones regulares, puede hacerlo con el siguiente resumen: foo coincidiría con todos los ficheros con nombres conteniendo foo; y foo.*bar coincidiría con todos los ficheros con nombres conteniendo foo, seguido de cualquier número de caracteres, y seguido por la cadena bar. Es por ello que las subcadenas normales coinciden consigo mismas, pero . y * son especiales. . coincide con cualquier caracter, y * quiere decir "coincide con cualquier número de veces, incluyendo cero, del caracter precedente". Los signos ^ y $ indican "encuentra al principio y final de la cadena", respectivamente; por tanto, ^foo.*bar.*baz$ encontraría las cadenas que comenzaran con foo, que contuvieran bar en medio, y que acabaran con baz. Esto es todo lo que vamos a profundizar; este resumen es una pequeña parte muy abreviada de la sintaxis completa de las expresiones regulares.)

El fichero commitinfo está para puntos de control genéricos que quiera ejecutar en todos los envíos. Aquí hay algunas líneas commitinfo de ejemplo:

^a-subdir*     /usr/local/bin/comprobar-asubdir.sh
ou             /usr/local/bin/validar-proyecto.pl

Así que cualquier envío en miproyecto/a-subdir/ coincidiría con la primera línea, por lo que se ejecutaría el guión comprobar-asubdir.sh. Un envío en cualquier proyecto cuyo nombre (nombre real de directorio del repositorio, no necesariamente nombre del módulo) contenga la cadena ou ejecutaría el guión validar-proyecto.pl, a menos que el envío ya haya coincidido con la línea a-subdir anterior.

En lugar de una expresión regular se puede usar la palabra DEFAULT o ALL. La línea DEFAULT (o la primera línea DEFAULT si hay más de una) se ejecutará si no coincide ninguna expresión regular, y cada una de las líneas ALL se ejecutará además de todas las líneas que puedan coincidir.

Los nombres de ficheros que se pasan al programa no se refieren a ficheros RCS - hacen referencia a ficheros normales, cuyos contenidos son exactamente los mismos que los de la copia de trabajo de la que se están enviando cambios. El único aspecto inusual es que CVS los tiene guardados temporalmente dentro del repositorio, así que estarán disponibles para los programas que se estén ejecutando en la máquina en la que está el repositorio.

El fichero loginfo es similar a commitinfo, excepto en que en lugar de actuar en los contenidos de los ficheros, actúa en los informes de cambios. El lado izquierdo del fichero loginfo contiene expresiones regulares, quizá incluyendo líneas DEFAULT y ALL. El programa invocado a la derecha recibe el informe de cambios en su entrada estándar; puede hacer lo que quiera con esa entrada.

El programa de la derecha también puede admitir un número arbitrario de argumentos de línea de órdenes. Uno de esos argumentos puede ser un código especial %, a expandir por CVS en tiempo de ejecución como sigue:

%s    ------>      nombre(s) de fichero(s) afectados por el envío de cambios
%V    ------>      número(s) de revisión antes del envío de cambios
%v    ------>      número(s) de revisión después del envío de cambios

La expansión empieza siempre con el subdirectorio del repositorio (relativo al nivel superior del repositorio), seguido de la información del fichero. Por ejemplo, si los ficheros afectados por el envío de cambios fueran foo, bar y baz, todos en miproyecto/a-subdir, %s se expandiría en:

miproyecto/a-subdir  foo  bar  baz

mientras que %V se expandiría para mostrar los números de revisión antiguos:

miproyecto/a-subdir  1.7  1.134  1.12

y %v los números de revisión nuevos:

miproyecto/a-subdir  1.8  1.135  1.13

Puede combinar expresiones con % delimitándolas con llaves siguiendo al signo % - esto las expandirá en series de sublistas separadas por comas, cada una conteniendo la información correspondiente a un fichero del envío. Por ejemplo, %{sv} se expandiría en

miproyecto/a-subdir  foo,1.8  bar,1.135  baz,1.13

y %{sVv} se expandiría en

miproyecto/a-subdir  foo,1.7,1.8  bar,1.134,1.135  baz,1.12,1.13

(Puede que tenga que mirar con cuidado para distinguir las comas de los puntos decimales en estos ejemplos.)

Aquí hay un fichero loginfo de ejemplo:

^miproyecto$   /usr/local/nuevorepos/CVSROOT/log.pl \
   -m miproyecto-devel@foobar.com %s
ou             /usr/local/bin/ou-notify.pl  %{sv}
DEFAULT        /usr/local/bin/default-notify.pl  %{sVv}

En la primera línea, cualquier envío de cambios en el subdirectorio miproyecto del repositorio invoca log.pl, pasándole una dirección de correo electrónico (a la que log.pl enviará un correo con el informe de cambios), seguido del repositorio, seguido de todos los ficheros del envío.

En la segunda línea, cualquier envío de cambios en un subdirectorio del repositorio que contenga la cadena ou invocará el guión (imaginario) notificar-ou.pl, pasándole el repositorio seguido de los nombres de los ficheros y de los nuevos números de revisión de los ficheros del envío.

La tercera línea invoca el guión (también imaginario) notificar-defecto.pl para cualquier envío que no coincida con ninguna de las dos línes anteriores, pasándole toda la información posible (ruta al repositorio, nombres de fichero, revisiones antiguas y revisiones nuevas).