2011-07-18 13 views
8

Me gustaría poder obtener el historial completo de una función o un bloque de texto en particular dentro de mi código.Historial de funciones con Mercurial

Sé que puedo tener las diffs de todas mis confirmaciones en un archivo en particular, pero solo quiero seguir la vida de un pequeño bloque de texto en particular dentro de mis archivos (una función C++ por ejemplo).

Quiero ver que cambiar aunque las revisiones pasadas, no importa si se mueve dentro del archivo o en otro archivo o incluso renombrado (el resto de la función que queda más o menos lo mismo al cambiar el nombre)

oí Mercurial podría hacer esto fácilmente gracias a su registro adecuado de la historia, pero no recuerdo dónde escuché eso (en mis sueños?) Y no puedo encontrar ninguna herramienta o forma de hacerlo excepto la historia tradicional y las herramientas de diferencia. Tal vez no busco con las palabras clave correctas ... ¿Alguien puede ayudar?

Gracias

PD: Todavía uso SVN para otros proyectos, y si alguien conoce una manera de lograr lo mismo con SVN, lo tomo también :-)

Respuesta

0

Al observar los deltas y/o el registro de hg no parece ser capaz de hacer lo que le pides o tener suficiente información para escribir un script para eliminar la información. Si lo desea, puede ver los cambios que le ocurrieron a un archivo durante un período de tiempo y buscar a través de eso lo que está buscando.

4

Esto es bastante factible con hg grep. Un ejemplo habla por sí mismo:

$ hg grep 'def revrange' --all 
mercurial/cmdutil.py:14319:-:def revrange(repo, revs): 
mercurial/scmutil.py:14319:+:def revrange(repo, revs): 
mercurial/cmdutil.py:3707:-:def revrange(ui, repo, revs): 
mercurial/cmdutil.py:3707:+:def revrange(repo, revs): 
mercurial/cmdutil.py:3090:+:def revrange(ui, repo, revs): 
mercurial/commands.py:3090:-:def revrange(ui, repo, revs): 
mercurial/commands.py:2331:-:def revrange(ui, repo, revs, revlog=None): 
mercurial/commands.py:2331:+:def revrange(ui, repo, revs): 
mercurial/commands.py:705:-:def revrange(ui, repo, revs = [], revlog = None): 
mercurial/commands.py:705:+:def revrange(ui, repo, revs, revlog=None): 
mercurial/commands.py:697:-:def revrange(ui, repo, revs = [], revlog = None): 
mercurial/commands.py:697:+:def revrange(ui, repo, revs, revlog=None): 
mercurial/commands.py:580:+:def revrange(ui, repo, revs = [], revlog = None): 

me preguntó hg encontrar def revrange (una definición de función). En combinación con el indicador --all al grep, imprime todas las revisiones que contienen un cambio en el estado de coincidencia.

por lo que podemos ver fácilmente la evolución de esta función:

  • que se introdujo por primera vez en la revisión 580, en commands.py
  • 697 elimina el valor por defecto para el argumento revoluciones
  • 705 parece ser una funden
  • 2331 eliminaron el argumento de revlog
  • 3090 se trasladó a la función cmdutil.py
  • 3707 eliminaron el argumento ui
  • y, finalmente, 14319 trasladó a la función scmutil.py

Por supuesto, esto no es perfecto, ya que si la función fue renombrada, la cadena terminaría después de que el cambio de nombre. Pero dependiendo de su caso de uso particular, esto podría ser suficiente.

Para ser más sofisticado, podría escribir una secuencia de comandos relativamente simple que incluso puede seguir el cambio de nombre.

Cuestiones relacionadas