Как я могу получить доступ к зафиксированному файлу из ловушки предварительной фиксации Subversion в Perl?

Мне нужно сделать следующее:

  1. Напишите pre-commit hook в Perl

  2. Хук должен проверять все файлы, которые были зафиксированы на наличие некоторого текста, и завершиться неудачей, если этот текст не найден

По сути, мне нужен пример Perl-хука, который читает файлы, которые были зафиксированы.

Я действительно ищу элегантное решение с наименьшим количеством кода.

Примечания: крюк следует использовать svnlook или другой лучший способ найти файлы.

3 ответа

Решение

Хук pre-commit:

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 подкаталог вашего репозитория для некоторых шаблонов и скриптов ловушек и добавленных скриптов ловушек.

Другие вопросы по тегам