如何在Mercurial存储库中找到频繁更改的文件?

如何在Mercurial存储库中找到频繁更改的文件?,mercurial,refactoring,Mercurial,Refactoring,我跳进了一个新的代码库,目的是使它更稳定。但我很难确定代码中大部分湍流的位置 我正在寻找一种方法,可以找到存储库中哪些文件最常被更改,这样我就可以为一些重构找到一个起点。似乎没有一个内置的Mercurial命令来实现这一点,谷歌似乎也没有什么可以提供的(或者我使用了错误的术语) 目前,我想到的只是编写一个脚本,解析hglog-v命令中的“files:”行,并手动计算文件数。这会起作用,但如果我是第一个不得不这么做的人,我会感到非常惊讶。这样就可以了: hg log --template "{f

我跳进了一个新的代码库,目的是使它更稳定。但我很难确定代码中大部分湍流的位置

我正在寻找一种方法,可以找到存储库中哪些文件最常被更改,这样我就可以为一些重构找到一个起点。似乎没有一个内置的Mercurial命令来实现这一点,谷歌似乎也没有什么可以提供的(或者我使用了错误的术语)

目前,我想到的只是编写一个脚本,解析
hglog-v
命令中的“files:”行,并手动计算文件数。这会起作用,但如果我是第一个不得不这么做的人,我会感到非常惊讶。

这样就可以了:

 hg log --template "{files % '{file}\n'}" | sort | uniq -c | sort -rn
     21 templates/base.html
     19 TODO
      8 content/about.rst
      6 static/screen.css

这显示了21个chngesets-touch
templates/base.html
,这是我的大部分微型repo。

我建议以相反的方式移动

  • 获取文件列表
  • 对于p.1中的每个文件,执行类似于
    hglogfilename--template“+”|wc-m

  • 以下是一个适用于较旧Mercurial安装的版本:

    $ hg grep --files-with-matches --all . | cut -d : -f 1 | sort | uniq -c | sort -rn
     21 templates/base.html
     19 TODO
      8 content/about.rst
      6 static/screen.css
    

    如果文件名中有冒号,则需要添加
    --print0
    并更改
    cut
    调用。

    模板仅适用于较新的Mercurial。我很想知道您使用的Mercurial版本是什么,在哪个操作系统上运行?是的,我正在运行2.5。我将加入一个适用于较旧Mercurial的soln。我选择这个作为正确答案,因为虽然它目前只适用于最近更新的Mercurial安装,但随着时间的推移,它更可能适用于其他人更新Mercurial安装。
    hg locate
    将比grep更简单,具有相同的结果。或者
    hg manifest
    (在这两种情况下都没有剪切),我认为使用
    locate
    您必须手动循环所有修订,因为它缺少
    --all
    ,而使用
    manifest
    时,
    --all
    选项会消除文件的重复,这样您就不会得到每个文件出现的修订数量的计数。您是否可以显示
    locate
    manifest
    解决方案,以统计更改集最多时修改的文件数?