Используйте сообщение о фиксации в перехватчике предварительной фиксации CVS

StackOverflow https://stackoverflow.com/questions/1857101

Вопрос

Можно ли использовать сообщение о фиксации в перехватчике предварительной фиксации в CVS?Сервер CVS работает удаленно, и я получаю к нему доступ с помощью pserver.

В идеале, я хочу разрешить фиксацию, если файлы проходят фильтр или сообщение о фиксации содержит определенный текст.

У меня нет выбора использовать другую систему управления версиями.

Это было полезно?

Решение

Вот несколько полезных руководств, чтобы узнать больше:

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 не является обязательным, мне просто нужно написать несколько (глупых) примеров:

контрольный список

# 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;

Пусть покупатель будет бдителен:Я написал большую часть этого на ум, без каких-либо тестов, поэтому не могу гарантировать, что это работает, но это должно вас хотя бы приблизить.

Изменить еще раз, я только что понял, что изначально был неправ, и вы можете передать как файл журнала, так и имена зафиксированных файлов в verifymsg делая ответ немного проще.

Другие советы

Тот Самый Резюме::Триггер Модуль Perl, похоже, имеет экспериментальный функция, позволяющая кэшировать значения между вызовами различных триггеров.На странице явно упоминается передача имен файлов из commitinfo в verifymsg, так что, возможно, это поможет вам достичь того, чего вы хотите.

Вы можете использовать verifymsg файл в CVSROOT каталог.Вы можете настроить его на вызов сценария, который может проверять содержимое комментария к проверке.Вы можете отклонить фиксацию, вернув ненулевое значение.

Файлverifymsg по умолчанию содержит более подробную информацию.

Я занимался той же проблемой.До сих пор моим лучшим решением было получить идентификатор родительского процесса (getppid()) и использовать его во временном файле, в который я могу поместить список файлов из commitinfo.Этот родительский идентификатор, по-видимому, один и тот же для процессаverifymsg (по крайней мере, в AIX).Удачи.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top