Mercurial的功能历史记录

时间:2011-07-18 22:39:04

标签: svn function mercurial dvcs

我希望能够在代码中获取函数或特定文本块的完整历史记录。

我知道我可以在特定文件中拥有所有提交的差异,但我只想跟踪文件中特定小块文本的生命(例如C ++函数)。

我希望看到它在过去的版本中发生变化,无论是在文件内部移动还是移动到另一个文件,甚至是重命名(重命名时其余功能都或多或少保持不变)

我听说Mercurial可以轻松地做到这一点,因为它正确记录了历史,但我不记得我在哪里(在我的梦中?)我找不到任何工具或方法来做到这一点,除了传统历史和差异工具。也许我没有使用正确的关键字进行搜索......任何人都可以提供帮助吗?

由于

PS:我仍然将SVN用于其他项目,如果有人知道用SVN完成同样的事情的方法,我也会接受: - )

2 个答案:

答案 0 :(得分:4)

这实际上与hg grep非常相似。一个例子说明了一切:

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

我要求hg找到def revrange(函数定义)。与--all的{​​{1}}标志结合使用时,会打印包含匹配状态更改的每个修订版。

所以我们可以很容易地看到这个函数的演变:

  • 它最初是在grep
  • 的修订版580中引入的
  • 697删除了revs参数的默认值
  • 705似乎是合并
  • 2331删除了revlog参数
  • 3090将该功能移至commands.py
  • 3707删除了ui参数
  • 最后,14319将该功能移至cmdutil.py

当然,这并不完美,因为如果重命名该函数,链将在重命名后结束。但是根据您的特定用例,这可能就足够了。

为了更复杂,您可以编写一个相对简单的脚本,甚至可以跟随重命名。

答案 1 :(得分:0)

通过查看增量和/或hg日志,它似乎无法执行您的要求或有足够的信息来编写脚本来重新输出信息。如果您希望在一段时间内看到文件发生的变化,并在其中搜索您正在寻找的内容。