2009-11-06 3 views
5

мне нужно сделать следующее:Как я могу получить доступ к зарегистрированному файлу с помощью перехвата Subversion pre-commit в Perl?

  1. Запись предварительно совершить крюк в Perl

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

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

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

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

ответ

11

перед фиксацией ловушкой:

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 

    } 
    } 
} 
0

Не нужно слишком сложно модифицировать this example in Python, чтобы делать то, что вы хотите. См. Также подкаталог hooks вашего репозитория для некоторых шаблонов и hook scripts и contributed hook scripts.

+0

@Alex Нет проблем. Редактирование сообщений других пользователей - это способ Stackoverflow и помогает сайту. –

0

Похоже, у вас есть фундамент, уже догадались:

  • получить список всех файлов, совершаемых
  • поиск каждого из них в свою очередь, для конкретного текста
  • если текст найден , отклонить фиксацию

Вы найдете информацию о написании крючков предварительной фиксации в manual.