Как я могу получить доступ к зафиксированному файлу из перехвата предварительной фиксации Subversion в Perl?
-
18-09-2019 - |
Вопрос
Мне нужно сделать следующее:
Напишите хук предварительной фиксации на Perl
Hook должен проверять все фиксируемые файлы на наличие некоторого текста и завершать работу с ошибкой, если этот текст не найден
По сути, мне нужен пример Perl-перехвата, который считывает фиксируемые файлы.
Я действительно ищу какое-нибудь элегантное решение с наименьшим объемом кода.
Примечания:Крючок следует использовать svnlook
или другой лучший способ поиска файлов.
Решение
крюк предварительной фиксации:
my $repos = shift;
my $txn = shift;
foreach my $line (`$svnlook changed -t $txn "$repos"`)
{
chomp($line);
if ($line !~ /^([AUD]).\s\s(.+)$/)
{
print STDERR "Can't parse [$line].\n";
exit(1);
}
else
{
my $action = $1;
my $file = $2;
chomp($file);
#If path has trailing slash, then it is a folder and we want to skip folders
if($file =~ /\/$/)
{
next;
}
my $fileContent = `$svnlook cat -t $txn "$repos" "$file"`;
if ($action =~ /[AU]/)
{
my @lines = split(/\n/, $fileContent );
#Check for whatever you need in this file's content
}
}
}
Другие советы
Похоже, вы уже определились с фундаментом:
- получить список всех передаваемых файлов
- выполняйте поиск определенного текста в каждом из них по очереди
- если текст найден, отклоните фиксацию
Вы найдете некоторую информацию о написании перехватов перед фиксацией в руководство пользователя.
Его не должно быть слишком сложно модифицировать этот пример на Python делать то, что ты хочешь.Смотрите также hooks
подкаталог вашего репозитория для некоторых шаблонов и скрипты для подключения и внесенные скрипты хуков.