¿Cómo se puede hacer coincidir la salida de svnlook en Perl?
Pregunta
Estoy corriendo SVN en un servidor Windows, y estoy usando scripts de Perl para implementar algunas cometer pre-ganchos. Estoy viendo el mensaje de error siguiente de TortoiseSVN:
Error !! ScriptError !! No se puede analizar línea: ruta _U / a / archivos / trunk
y este es el 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);
He intentado sustituir la expresión regular con cosas como /_([AUD]).\s\s(.+)$/
sin éxito -. Incluso intenté /.*([AUD]).\s\s(.+)$/
Los pensamientos? Sugerencias?
Solución
Sin un vistazo a la documentación de SVN Sólo estoy adivinando:
En la salida anterior solo espacio se muestra entre U y la trayectoria real, pero que ha \s\s
en todas sus expresiones regulares.
[editar] Ok, ahora que tenía un aspecto en el svnlook referencia . En primer lugar, su expresión regular falla por versiones actuales de svnlook, tal como se especifica la salida de la siguiente manera:
- Las dos primeras columnas contienen el estado
- La ruta comienza en la quinta columna
- Estado puede ser una de A (añadido), U (contenido cambiado), D (suprimido), _U (propiedades cambios), y UU (contenido + inmuebles cambiaron)
Por lo tanto, usted debe ser capaz de igualar con algo como ^([_AUD]+)\s+(.+)$
. Uno puede ser más específicos, pero eso no es necesario.
Si esto no coincide, por favor tubería de salida del comando a un archivo, y publicar la parte pertinente aquí.
Otros consejos
if ($line !~ /^_?([AUD])\s+(.+)$/
debería funcionar bien.