Según su pregunta, está implícitamente calificando su solicitud a archivos borrados (porque presumiblemente si no se elimina una simple búsqueda de directorio lo revelaría). El comentario de Lazy Badger es digno: eliminar la calificación sin perder precisión y, por lo tanto, simplificar el comando. Estoy totalmente a favor de la simplificación, pero dado cualquier problema, también me gustaría considerar sacar más provecho de una solución a un pequeño costo adicional.
Así que a partir de la solución propuesta:
svn log -v a/b/ | grep " D .*a/b/c.xml"
quisiera en primer lugar añadir la opción -q
, lo que reduce la producción que se acaba descartando todos modos:
svn log -v -q a/b/ | grep " D .*a/b/c.xml"
Y entonces me gustaría para saber no solo si hubo un archivo eliminado, sino también cuando se eliminó (es decir, en qué revisión). Dado que también calificado implícitamente su entorno para Unix/Linux, aquí hay una solución con awk (adaptado de esta blog entry):
svn log -q -v a/b/ | awk '
/^r[0-9]* \|/ { REVISION=$1; }
/D/ { print REVISION": "$0; }
' | grep " D .*a/b/c.xml"
que funciona debido al formato de la salida svn log
cuando se utiliza el parámetro –v
: se informa una revisión seguida de todos los archivos en esa revisión. He aquí un ejemplo que muestra que el archivo Page.cs fue borrado en la revisión 10506:
r10506 | msorens | 2011-02-14 12:58:56 -0800 (Mon, 14 Feb 2011) | 1 line
Changed paths:
A /Projects/Test/Common
A /Projects/Test/Common/Setup.cs
A /Projects/Test/Common/Utility.cs
D /Projects/Test/Page.cs
Los comandos awk más que la producción de análisis en este formato que extraen el número de revisión de la línea superior y luego los archivos marcados como eliminados (la “D " líneas). Para Windows, PowerShell proporciona la misma potencia y facilidad de uso como awk mediante el uso de la instrucción switch:
$(switch -Regex (svn log -q -v a/b) {
'^(r[0-9]*) \|' { $rev = $Matches[1] }
'^ D\s+(.*)' { "{0,-6} {1}" -f $rev, $Matches[1] }
}) | Select-String "a/b/c.xml"
Pero hay una manera más fácil con TortoiseSVN --- Sólo tiene que abrir la ventana de registro en la raíz de su trabajo copie y escriba el nombre del archivo en el cuadro de búsqueda. La lista de revisiones se filtra inmediatamente por lo que escribas. Si muestra más de una línea de salida, la última (más alta) revisión siempre será aquella en la que se eliminó el archivo.
svn log -q -v | nombre de archivo grep | wc -l –