2011-03-16 19 views
20

¿Hay alguna manera en mercurial de encontrar un cambio dando un patrón en la edición (el código modificado), a diferencia del mensaje de registro o nombre de archivo?Encontrar conjuntos de cambios en mercurial mediante la eliminación del parche

He mirado muy bien en "hg help revsets" y creo que no hay una buena manera de hacerlo. Este es el mejor truco que se me ocurrió, pero espero haber perdido una capacidad, o que alguien puede hacerlo un poco mejor.

hg log -M -u goldberg -p | grep '(^changeset:\|<pattern>) '| grep -c 1 '' <pattern>

(y luego seleccionar manualmente el número de revisión para el trabajo posterior con esas revisiones)

+0

ya que modifiqué un poco mi propia sugerencia (ya que una función zsh debería funcionar en bash) pensé en seguir. También agregando alguna discusión debajo ... hg_find_patch() {hg log -M -u goldberg -p --style default | grep '\ (^ changeset: \ |^[+ -]. *' $ {1} '\)' | grep -B 1 $ {1}} –

Respuesta

30

debería echar un vistazo a hg grep.

Search revisions of files for a regular expression. 

This command behaves differently than Unix grep. It only accepts 
Python/Perl regexps. It searches repository history, not the working 
directory. It always prints the revision number in which a match appears. 

By default, grep only prints output for the first revision of a 
file in which it finds a match. To get it to print every revision that 
contains a change in match status ("-" for a match that becomes a non-match, 
or "+" for a non-match that becomes a match), use the --all flag. 

Returns 0 if a match is found, 1 otherwise. 

Puede escribir hg grep --help para más información.

+0

¡Gracias! No había visto eso. –

+0

Esto me acerca más. Si entiendo bien, hg grep le dirá si todo el archivo contiene o no un patrón (para que pueda ver cuándo se modificó ese hecho). Estoy buscando todas mis ediciones que tienen ese patrón. Por ejemplo, pude elegir una variable con la que estuve trabajando durante una semana y extraer todos los conjuntos de cambios relevantes, a pesar de que la variable ha estado presente durante años. ¿Tengo razón en que hg grep no puede hacer eso? –

+0

Puede usar '--all' para buscar todos los conjuntos de cambios en el repositorio o' -r' para especificar un rango de revisión. Por ejemplo, si hace 'hg grep --all" $ myvariable "path/tofile.php', mercurial verá en todas las revisiones del archivo dado para el patrón" $ myvariable "la revisión correspondiente de impresión donde encontró el patrón para el primera vez. – krtek

Cuestiones relacionadas