Вот некоторые полезные учебники, чтобы узнать больше:
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;
Caveat emptor: я написал большую часть этого с моей головы без тестирования, поэтому я не могу гарантировать, что это работает, но это должно заставить вас хотя бы закрыть.
Edit снова, я просто понял, что я изначально неправильно, и вы можете передать как логи и совершенные имена файлов в verifymsg
делает ответ совсем немного проще.
Какую версию CVS вы пробовали? С моей версией, когда я укажу% s в файле 'verifymsg', я не получаю зафиксированные файлы, я все равно получаю только файл журнала. – dreamlax
@dreamlax Мне никогда не приходилось использовать 'verifymsg', как у вас, я использовал только' loginfo' и 'commitinfo', но я думал, что нашел несколько примеров в Интернете, которые показали' verifymsg', принимающий оба журнала файла и% s. Если это не сработает для вас, возможно, вам придется вернуться к какой-то связи между скриптом 'commitinfo' и скриптом' verifymsg'. –
@dreamlax Кроме того, вы могли бы обойтись с требованиями обоих критериев? Тогда будет работать более ранняя версия моего ответа, в которой использовались commitinfo и verifymsg. Я думаю, это зависит от того, имеете ли вы логическое ** или ** или более типично английское ** или **. –