Вот несколько полезных руководств, чтобы узнать больше:
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
Вы не можете делать то, что хотите, только с одним хуком, но вы можете использовать два хука, commitinfo
позволит вам проверить сами файлы и verifymsg
позволит вам проверить сообщение. Оба могут быть использованы для отмены фиксации (программы просто нужно выйти со статусом 1). В случае, если вы не знали, checkoutlist
, commitinfo
и 'verifymsg' могут быть найдены в каталоге CVSROOT вашего репозитория. Я бы порекомендовал помещать любые скрипты, которые вы пишете, в качестве хуков в этот каталог, но это не имеет большого значения, так как вы можете указать полный путь. Кроме того, Perl не является необходимым или обязательным, просто для меня просто написать (глупые) примеры в:
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
* * Приемлемая тысяча двадцать-один * * тысяча двадцать-дв
#/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;
Предостережение: я написал большую часть этого без всякой проверки, поэтому не могу гарантировать, что это сработает, но это должно как минимум приблизить вас.
Отредактируйте еще раз , я только что понял, что изначально был неправ, и вы можете передать как лог-файл, так и зафиксированные имена файлов в verifymsg
, делая ответ немного проще.