这实际上对于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 到 grep 的标志,这将打印包含匹配状态更改的每个修订。
所以我们可以很容易地看到这个函数的演变:
- 它最初是在修订版 580 中引入的,在
commands.py
- 697 删除了 revs 参数的默认值
- 705 似乎是合并
- 2331 删除了 revlog 参数
- 3090 将函数移至
cmdutil.py
- 3707 移除了 ui 参数
- 最后,14319 将函数移至
scmutil.py
当然,这并不完美,因为如果函数被重命名,链将在重命名后结束。但根据您的特定用例,这可能就足够了。
为了更复杂,您可以编写一个相对简单的脚本,甚至可以跟随重命名。