попробуйте это:
//[содержит (@prop, 'нечто')]
, который должен работать на любые теги "a" в документе
Вот несколько полезных учебных пособий по продаже:
http: // durak .org / Sean / Pubs / Software / CVSBook / The-ContimeInfo-and-loginfo-and-rcsinfo-and files.html
http://durak.org/sean/pubs/software/cvsbook/the-verifymsg-and -RCSINFO-файлы .HTML # The-verifymsg-and-rcsinfo-файлы
Вы не можете делать то, что вы хотите только с одним крюком, но вы можете использовать два крючка, ContimeInfo
позволит вам проверить Сами файлы и verifymsg
позволит вам проверить сообщение. Оба могут быть использованы для отмены фиксации (программы просто нужно выйти со статусом 1). В случае, если вы не знали, CheckoutList
, ContimeInfo
и «Verifymsg» могут быть найдены в каталоге CVSRoot вашего репозитория. Я бы порекомендовал порекомендовать какие-либо скрипты, которые вы пишете как крючки в этом каталоге, но это не имеет значения, насколько вы получаете, чтобы указать полный путь. Кроме того, Perl не нужен или не требуется, просто просто для меня писать некоторые (глупые) примеры в:
# these files will be automatically checked out for you
acceptable
# 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;
Angreat
#/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;
Удостоверение
#/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
, что делает ответ довольно проще.
Вы можете использовать файл verifymsg
в каталоге CVSROOT
. Вы можете настроить его для вызова сценария, который может проверить содержимое комментария к отметке. Вы можете отклонить фиксацию, вернув ненулевое значение.
Файл verifymsg по умолчанию содержит более подробную информацию.
Модуль CVS :: Trigger Модуль Perl, по-видимому, имеет функцию эксперимента , которая позволяет кэшировать значения между вызовом разных триггеров. Страница явно упоминает, передавая файлы имена файлов PeryInfo для verifymsg, поэтому, возможно, это поможет вам добиться того, что вы хотите.
Я занимался тем же вопросом. До сих пор лучшим решением было получение идентификатора родительского процесса (getppid()) и использование его во временном файле, в который я могу поместить список файлов из commitinfo. Этот родительский ID, похоже, такой же для процесса verifymsg (по крайней мере, на AIX). Удачи.