Как я могу сравниться с выходом svnlook в Perl?
Вопрос
Я запускаю SVN на сервере Windows, и я использую сценарии Perl для реализации некоторых предварительных крючков. Я вижу следующее сообщение об ошибке от Tortoisesvn:
Ошибка !! Scripterror !! Не удается проанализировать линию: _u path/to/files/trunk
И это сценарий:
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(.+)$/
.
Мысли? Предложения?
Решение
Без рассмотрения документации SVN я просто догадаюсь: в выводе выше только одно пространство показано между u и фактическим путем, но у вас есть \s\s
во всех ваших режимах.
РЕДАКТИРОВАТЬ] ОК, теперь я посмотрел на Ссылка на SVNLook. Анкет Во -первых, ваша регуляция выходит из строя для текущих версий svnlook, так как вывод указан следующим образом:
- Первые два столбца содержат статус
- Путь начинается в пятом столбце
- Статус может быть одним из (добавленных), U (содержимое изменено), D (удалено), _u (изменения свойств) и UU (содержимое + свойства изменены)
Итак, вы должны быть в состоянии сопоставить что -то вроде ^([_AUD]+)\s+(.+)$
. Анкет Можно стать более конкретным, но в этом нет необходимости.
Если это не совпадает, пожалуйста, перенесите вывод команды в файл и опубликуйте здесь соответствующую часть.
Другие советы
if ($line !~ /^_?([AUD])\s+(.+)$/
должен работать нормально.