Come posso abbinare l'uscita svnlook in Perl?
Domanda
Sono in esecuzione SVN su un server Windows, e sto usando script Perl per implementare alcune pre-commit ganci. Sto vedendo il seguente messaggio di errore da TortoiseSVN:
Errore !! ScriptError !! Impossibile analizzare Linea: percorso _U / a / file / trunk
e questo è lo 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);
Ho provato a sostituire l'espressione regolare con le cose come /_([AUD]).\s\s(.+)$/
senza sucesso -. Ho anche provato /.*([AUD]).\s\s(.+)$/
Pensieri? Suggerimenti?
Soluzione
Senza uno sguardo alla documentazione SVN Sto solo cercando di indovinare:
In uscita al di sopra solo uno spazio è mostrato tra U e il percorso effettivo, ma avete \s\s
in tutte le tue espressioni regolari.
[modifica] Ok, ora ho avuto uno sguardo al svnlook riferimento . In primo luogo, la vostra espressione regolare non riesce per le attuali versioni di svnlook, come è specificato l'uscita nel seguente modo:
- Le prime due colonne contengono lo stato
- Il percorso inizia dalla quinta colonna
- stato può essere uno di A (aggiunto), U (contenuto modificato), D (cancellato), _U (proprietà) modifiche e UU (content + proprietà modificate)
Quindi, si dovrebbe essere in grado di abbinare con qualcosa come ^([_AUD]+)\s+(.+)$
. Si può ottenere in modo più preciso, ma che non è necessario.
Se questo non corrisponde, si prega di pipe l'output del comando in un file, e post la parte rilevante qui.
Altri suggerimenti
if ($line !~ /^_?([AUD])\s+(.+)$/
dovrebbe funzionare bene.