Как мне сопоставить вывод svnlook в Perl?
Я запускаю 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 ответа
Не заглядывая в документацию SVN, я просто догадываюсь: в приведенном выше выводе только один пробел показан между U и фактическим путем, но у вас есть \s\s
во всех ваших регулярных выражениях.
[править] Хорошо, теперь я посмотрел ссылку на svnlook. Во-первых, ваше регулярное выражение терпит неудачу для текущих версий svnlook, поскольку выходные данные указываются следующим образом:
- Первые два столбца содержат статус
- путь начинается в пятом столбце
- Состояние может быть одним из A (добавлено), U (содержимое изменено), D (удалено), _U (изменение свойств) и UU (содержимое + свойства изменены)
Таким образом, вы должны быть в состоянии сопоставить что-то вроде ^([_AUD]+)\s+(.+)$
, Можно конкретизировать, но в этом нет необходимости.
Если это не совпадает, пожалуйста, передайте вывод команды в файл и опубликуйте соответствующую часть здесь.