Perl의 svnlook 출력을 어떻게 일치시킬 수 있습니까?
문제
Windows 서버에서 SVN을 실행하고 있으며 PERL 스크립트를 사용하여 사전 커밋 후크를 구현합니다. TortoisesVN의 다음 오류 메시지가 표시됩니다.
오류 !! 스크립 테러 !! 라인을 구문 분석 할 수 없습니다 : _U 경로/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);
Regex를 같은 것들로 교체하려고했습니다 /_([AUD]).\s\s(.+)$/
성공하지 않고 - 나는 심지어 시도했다 /.*([AUD]).\s\s(.+)$/
.
생각? 제안?
해결책
SVN 문서를 살펴 보지 않고 나는 단지 추측하고 있습니다. 위의 출력에는 u와 실제 경로 사이에 공간이 표시되지만 \s\s
당신의 모든 성과에서.
편집] 좋아, 이제 나는 svnlook 참조. 먼저 출력이 다음과 같이 지정되어 있으므로 현재 버전의 SVNLook에 대한 Regex가 실패합니다.
- 처음 두 열에는 상태가 포함되어 있습니다
- 경로는 다섯 번째 열에서 시작됩니다
- 상태는 A (추가), u (컨텐츠 변경), d (삭제), _U (속성 변경) 및 UU (컨텐츠 + 속성 변경) 중 하나 일 수 있습니다.
그래서 당신은 같은 것과 일치 할 수 있어야합니다. ^([_AUD]+)\s+(.+)$
. 더 구체적으로 얻을 수 있지만 필요하지 않습니다.
이것이 일치하지 않으면 명령의 출력을 파일에 파이프하고 여기에 관련 부분을 게시하십시오.
다른 팁
if ($line !~ /^_?([AUD])\s+(.+)$/
잘 작동해야합니다.
제휴하지 않습니다 StackOverflow