2012-07-05 12 views
6

Me gustaría buscar las diferencias de un archivo (idealmente un conjunto de archivos) para un conjunto específico de revisiones (o todas). Estoy buscando un informe de diferencias que sea de búsqueda de texto. Tengo esto:¿hay alguna manera de buscar un conjunto de diferencias para una cadena en particular para un archivo?

hg diff -r 0:47131 .\TheFile.cs | grep 'theSearch' -Context 50

OK, que funciona bastante bien, pero decidir la cantidad de contexto para incluir es un problema, así como la búsqueda de la primera y última revisión. Puedo automatizar esto mejor, pero parece que será un poco de trabajo.

Me pregunto si hay alguna herramienta que lo haga mejor. Tal vez una página web de informe diff para el servidor de hg?

Respuesta

10

Puede usar hg grep para buscar en todo el historial de repos.

Por ejemplo:

hg grep --all --include .\TheFile.cs 'theSearch' 

encontrará todas las instancias de 'theSearch' en cada revisión de la cesión temporal. Sin el indicador --all, se detiene en la primera revisión que incluye la cadena.

1

Tengo la sensación de que hg grep busca el contenido del archivo completo para cada revisión coincidente. Mientras que si desea buscar sólo el diff, intentar algo como esto:

hg log --template "{ifcontains('TODO', diff(), '{node} {desc}\n', '')}"

Esto mostrará una lista de revisiones que contienen "TODO" en su diff. Tenga en cuenta que esto también buscará las líneas eliminadas, así como el contexto de diferencia (+/- 3 líneas), por lo que no es perfecto.

Puede restringir aún más el uso de argumentos para diff() - vea hg help template - y use los cambios (-r ...).

Esto puede ser mejor que usar su método hg diff | grep porque diferencia cada conjunto de cambios uno por uno en lugar de diferir todo el repositorio en dos conjuntos de cambios, y le permite usar cambios para filtrar las revisiones de fusión, por ejemplo.

+0

''{node} {desc} \ n'' sería más útil IMO – arhak

+0

@arhak gracias, editado. –

Cuestiones relacionadas