Pregunta ¿Cómo excluyo ciertos archivos de un svn diff?


Estoy usando svn diff -c 789 para mostrar los cambios realizados en la revisión 789 de nuestro software, pero muestra muchos archivos que no me importan, en particular los archivos de prueba. ¿Cómo puedo excluir ciertos archivos del diff, por ejemplo, todos los archivos que coinciden con el patrón? *Test.java?

Estoy usando Cygwin en Windows, si eso es importante.


9
2018-05-07 08:52


origen


Respuestas:


Como svn diff no permite excluir archivos específicos de la salida, a continuación se muestra una secuencia de comandos de BASH que se puede usar para lograr eso.

Toma dos argumentos:

  • file con un svn diff salida
  • pattern de los archivos que se excluirán (p. test/*)

e imprime el contenido de la file sin los cambios de los archivos que coinciden pattern.

#!/bin/bash

test $# -ne 2 && echo "Usage: $0 svn_diff_file exclude_pattern" && exit 1

ignore=0
while IFS= read -r line; do
    echo $line | grep -q -e "^Index: " && ignore=0
    echo $line | grep -e "^Index: " | grep -q -e "^Index: $2" && ignore=1
    test $ignore -eq 0 && echo "$line"
done < $1

Actualizar

Acabo de encontrar una herramienta que hace este trabajo: filterdiff. Su uso es muy similar al script anterior:

filterdiff svn_diff_file -x exclude_pattern


6
2018-05-07 13:46



Por cierto, recuerde que los comandos svn diff funcionan como otros comandos siguiendo la filosofía modular de Unix donde cada comando tiene una entrada y salida estándar. Puede configurar su propia secuencia de comandos personalizada para los archivos de la lista que desea incluir, redirigir la salida de esa secuencia de comandos a los comandos svn diff mediante el uso de tuberías y luego redirigir su salida de diff al archivo deseado que desea crear. Para ser más claro: sigue este ejemplo

svn diff `cat change_list.txt` > patch.diff

en change_list.txt son los archivos que desea incluir en el diff separados por espacio. Por ejemplo, el contenido del archivo podría ser este:

"dominio / modelo / entidad.java"

"web_app / controllers / controller.java"

Entonces, siguiendo este enfoque, la única dificultad de su problema se reduce para implementar un guión que, como Adam, escribió generosamente arriba.

¡Espero eso ayude!

Vic.


3
2017-08-28 18:38



Esto es lo que hice:

FILES=$(svn status some_dir|grep ^M|cut -b2-|grep -v dir_to_remove)
test -n "$FILES" && svn diff "$FILES"

1
2017-07-25 10:42