Node:Los Ficheros commitinfo y loginfo y rcsinfo, Next:Los Ficheros verifymsg y rcsinfo, Previous:El Fichero modules, Up:El directorio administrativo CVSROOT/
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).