Как мне сопоставить вывод svnlook в Perl? - PullRequest
0 голосов
/ 08 февраля 2010

Я запускаю SVN на сервере Windows и использую сценарии Perl для реализации некоторых хуков перед фиксацией. Я вижу следующее сообщение об ошибке от TortoiseSVN:

Ошибка !! ScriptError !! Не могу разобрать строка: _U путь / к / файлам / транку

и это сценарий:

foreach my $line (`$svnlook changed -t "$txn" "$repos"`)
{
  chomp($line);
  if ($line !~ /([AUD]).\s\s(.+)$/)
  {
    print STDERR "!!Script Error!! Can't parse line: $line\n";
    exit(1);
  }
  else
  {
     # perform some actions 
  }
}

exit(0);

Я попытался заменить регулярное выражение такими вещами, как /_([AUD]).\s\s(.+)$/, но безуспешно - я даже попытался /.*([AUD]).\s\s(.+)$/.

Мысли? Предложения?

Ответы [ 2 ]

4 голосов
/ 08 февраля 2010

Не заглядывая в документацию SVN, я просто догадываюсь: В выводе выше только один пробел показан между U и фактическим путем, но у вас есть \s\s во всех ваших регулярных выражениях.

[править] Хорошо, теперь я посмотрел ссылку svnlook . Во-первых, ваше регулярное выражение не выполняется для текущих версий svnlook, так как выходные данные указаны следующим образом:

  • Первые два столбца содержат статус
  • путь начинается в пятом столбце
  • Состояние может быть одним из: A (добавлено), U (содержимое изменено), D (удалено), _U (изменение свойств) и UU (содержимое + свойства изменены)

Итак, вы должны быть в состоянии сопоставить что-то вроде ^([_AUD]+)\s+(.+)$. Можно конкретизировать, но в этом нет необходимости.

Если это не совпадает, пожалуйста, передайте вывод команды в файл и опубликуйте соответствующую часть здесь.

0 голосов
/ 08 февраля 2010

if ($line !~ /^_?([AUD])\s+(.+)$/ должно работать нормально.

...