Historial de funciones con Mercurial

Me gustaría poder get el historial completo de una function o un bloque de text en particular dentro de mi código.

Sé que puedo tener las diferencias de todos mis compromisos en un file en particular, pero solo quiero seguir la vida de un pequeño bloque de text en particular dentro de mis files (una function de C ++, por ejemplo).

Quiero ver que cambie a través de las revisiones anteriores, sin importar si se mueven dentro del file o hacia otro file o incluso cambian de nombre (el rest de la function permanece más o less igual al cambiar el nombre)

Escuché que Mercurial podría hacer esto fácilmente gracias a su logging apropiado 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 la diferencia. herramientas. Tal vez no busco con las palabras key correctas … ¿Alguien puede ayudar?

Gracias

PD: Todavía utilizo SVN para otros proyectos, y si alguien sabe una forma de lograr lo mismo con SVN, lo tomo también 🙂

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): 

Le pedí a hg que encontrara def revrange (una definición de function). En combinación con --all flag to grep , esto imprime cada revisión que contiene un cambio en el estado de la coincidencia.

Entonces, podemos ver fácilmente la evolución de esta function:

  • se introdujo por primera vez en la revisión 580, en commands.py
  • 697 eliminó el valor pnetworkingeterminado para el argumento revs
  • 705 parece ser una fusión
  • 2331 eliminó el argumento revlog
  • 3090 movió la function a cmdutil.py
  • 3707 eliminó el argumento ui
  • y finalmente, 14319 movió la function a scmutil.py

Por supuesto, esto no es perfecto, ya que si se cambiaba el nombre de la function, la cadena terminaría después del cambio de nombre. Pero dependiendo de su caso de uso particular, esto podría ser suficiente.

Para ser más sofisticado, podría escribir un guión relativamente simple que incluso puede seguir el cambio de nombre.

Al observar los deltas y / o el logging de hg, parece que no puede hacer lo que usted pide o que tiene suficiente información para escribir un script para eliminar la información. Si lo desea, puede ver los cambios que le ocurrieron a un file durante un período de time y search a través de eso lo que está buscando.