Éstos 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
se lo hará Verifique los archivos ellos mismos y verifymsg
le permitirá verificar el mensaje. Ambos pueden usarse para cancelar la confirmación (los programas solo necesitan salir con el estado 1). En caso de que no lo supiera, checkoutlist
, commitinfo
y 'verifymsg' pueden encontrarse en el directorio CVSROOT de su repositorio. Yo recomendaría poner cualquier script que escribas como ganchos en ese directorio, pero realmente no importa ya que puedes 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;
Caveat Emptor: escribí la mayor parte de esto sin ninguna prueba, así que no puedo garantizar que funcione, pero debería conseguirte al menos cerca.
Editar nuevo, sólo se dio cuenta de que yo era originalmente mal y se puede pasar tanto el archivo de registro y los nombres de archivo comprometidos a verifymsg
haciendo la respuesta un poco más simples.
¿Con qué versión de CVS ha probado esto? Con mi versión, cuando especifico% s en el archivo 'verifymsg' no obtengo los archivos comprometidos, solo obtengo el archivo de registro. – dreamlax
@dreamlax Nunca he tenido la necesidad de usar 'verifymsg' como lo hizo, solo he usado' loginfo' y 'commitinfo' pero pensé que había encontrado algunos ejemplos en línea que mostraban que' verifymsg' aceptaba tanto el registro archivo y% s. Si eso no funciona para usted, es posible que deba recurrir a algún tipo de comunicación entre un script 'commitinfo' y el script' verifymsg'. –
@dreamlax Además, ¿podrías conformarte con requerir ambos criterios? Entonces una versión anterior de mi respuesta que usaba commitinfo y verifymsg funcionaría. Supongo que depende de si te referías a ** o ** lógico o más típicamente inglés ** o **. –