Pregunta

¿Es posible utilizar el mensaje de confirmación en un gancho pre-commit en el CVS? El servidor CVS se está ejecutando de forma remota, y yo con él, utilice pserver.

Lo ideal es que quiero para permitir el envío de datos si los archivos pasan el filtro o el mensaje del informe contiene un texto determinado.

No tengo la opción de utilizar otro sistema de control de versiones.

¿Fue útil?

Solución

Estos son algunos tutoriales útiles para leer más:

http: / /durak.org/sean/pubs/software/cvsbook/The-commitinfo-And-loginfo-And-rcsinfo-Files.html
http://durak.org/sean/pubs/software/cvsbook/The-verifymsg-And-rcsinfo-Files.html#The-verifymsg-And-rcsinfo-Files

No se puede hacer lo que quiera con sólo un gancho, pero se pueden utilizar dos ganchos, commitinfo le permitirá comprobar los archivos ellos mismos y verifymsg le permitirá verificar el mensaje. Ambos pueden ser utilizados para cancelar el envío de datos (los programas sólo tiene que salir con el estado 1). En caso de que no estaban al tanto, checkoutlist, commitinfo y 'verifymsg' se pueden encontrar en el directorio CVSROOT del repositorio. Yo recomendaría poner cualquier script que escribe como ganchos de ese directorio, así, pero en realidad no importa como se llega a especificar la ruta completa. Además, Perl no es necesaria o requerida, sólo simple para mí escribir algunos ejemplos (tontos) en:

checkoutlist

# these files will be automatically checked out for you
acceptable

verifymsg

# specifies which file to run as hook, %l is filename of log message
# bar$     /path/to/repo/CVSROOT/verify_ends_in_bar %l
DEFAULT    /path/to/repo/CVSROOT/acceptable %l %s

aceptable

#/usr/bin/perl -w

use strict;
use warnings;

# this would be simpler if cvs passed sane arguments
my ($logfile, $dir, @files) = @ARGV;
my $grep = `grep -i 'accept liability' $logfile`;
exit 0 if $grep;

my $found = 0;
foreach my $file (@files) {
    my $path = join '/', $dir, $file;
    die "Can't find file $path" if ! -e $path;
    my $grep = `grep -i 'evidence of any deliberation' $path`;
    $found++ if $grep;
}
die "You must accept liability or show evidence of deliberation" if $found < @files;

Emptor de la advertencia: me escribió la mayor parte de este de la parte superior de mi cabeza sin pruebas, así que no puedo garantizar que funciona pero debe conseguir que al menos cerca

.

Editar nuevo , me he dado cuenta de que yo era originalmente mal y se puede pasar tanto el archivo de registro y los nombres de archivo comprometidos a hacer verifymsg la respuesta un poco más simple.

Otros consejos

El CVS :: disparador módulo de Perl parece tener una fuerte> experimental que permite el almacenamiento en caché los valores entre el llamado de diferentes factores desencadenantes. La página menciona explícitamente pasar los nombres de archivo de commitinfo a verifymsg, así que tal vez le ayuda a lograr lo que desea.

Puede utilizar el archivo en el directorio verifymsg CVSROOT. Puede configurarlo para llamar a un script que puede verificar el contenido del registro comentario. Puede rechazar el envío de datos mediante la devolución no es cero.

El archivo verifymsg predeterminado contiene más detalles.

He estado tratando con el mismo problema. Hasta ahora mi mejor solución ha sido conseguir el ID del proceso padre (getppid ()) y utilizarlo archivo temporal ina que puedo poner la lista de archivos en de commitinfo. Este ID padres parece ser la misma para el proceso verifymsg (en AIX al menos). Buena suerte.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top