Como posso corresponder à saída do SVNLOOK no Perl?
Pergunta
Estou executando o SVN em um servidor Windows e estou usando scripts Perl para implementar alguns ganchos de pré-compromisso. Estou vendo a seguinte mensagem de erro do Tortoisesvn:
Erro !! Scripterror !! Não é possível analisar a linha: _u caminho/para/arquivos/tronco
E este é o script:
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);
Eu tentei substituir o regex por coisas como /_([AUD]).\s\s(.+)$/
sem sucesso - eu até tentei /.*([AUD]).\s\s(.+)$/
.
Pensamentos? Sugestões?
Solução
Sem uma olhada na documentação do SVN, estou apenas adivinhando: na saída acima, apenas um espaço é mostrado entre u e o caminho real, mas você tem \s\s
em todas as suas regexes.
editar] Ok, agora eu dei uma olhada no Referência do SVNLOOK. Primeiro, seu regex falha para as versões atuais do SVNLOOK, pois a saída é especificada da seguinte forma:
- As duas primeiras colunas contêm o status
- O caminho começa na quinta coluna
- O status pode ser um dos (adicionados), u (conteúdo alterado), d (excluído), _u (alterações de propriedades) e UU (Propriedades do conteúdo + alteradas)
Então, você deve ser capaz de combinar com algo como ^([_AUD]+)\s+(.+)$
. Pode -se ficar mais específico, mas isso não é necessário.
Se isso não corresponder, tole a saída do comando em um arquivo e publique a parte relevante aqui.
Outras dicas
if ($line !~ /^_?([AUD])\s+(.+)$/
deve funcionar bem.