Как я могу сравниться с выходом svnlook в Perl?

StackOverflow https://stackoverflow.com/questions/2223802

  •  19-09-2019
  •  | 
  •  

Вопрос

Я запускаю 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+(.+)$/ должен работать нормально.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top