文件中行范围的Mercurial log/diff

文件中行范围的Mercurial log/diff,mercurial,diff,history,Mercurial,Diff,History,我想要一个扩展名或工具来帮助我浏览给定文件中一系列行的历史记录。假设我想查看一个特定函数的历史记录,当前位于第[start,end]行。hg annotate让我开始: AAA 772 06-Aug-02: void Graphics2DDXF::lineTo(double x, // the x coordinate AAA 772 06-Aug-02: double y // the y cooordinate AAA 772 06

我想要一个扩展名或工具来帮助我浏览给定文件中一系列行的历史记录。假设我想查看一个特定函数的历史记录,当前位于第[start,end]行。hg annotate让我开始:

AAA  772 06-Aug-02: void Graphics2DDXF::lineTo(double x, // the x coordinate
AAA  772 06-Aug-02:                            double y // the y cooordinate
AAA  772 06-Aug-02:                            )
AAA  772 06-Aug-02:     {
BBB 2034 30-Aug-04:     LOG;
BBB 6989 05-Dec-11: 
BBB 4638 31-Oct-07:     transform_->transform(&x,&y);
AAA  772 06-Aug-02: 
BBB 7011 06-Jan-12:     AGcRoot<Line> line = gcnew Line;
BBB 6989 05-Dec-11: 
BBB 6989 05-Dec-11:     Point3d startPoint(lastPenLocation_->x(), lastPenLocation_->y(), 0.0);
BBB 6989 05-Dec-11:     Point3d endPoint(x, y, 0.0);
BBB 6989 05-Dec-11:     line->StartPoint = startPoint;
BBB 6989 05-Dec-11:     line->EndPoint = endPoint;
BBB 6989 05-Dec-11: 
BBB 4638 31-Oct-07:     lastPenLocation_ = APoint2D::New(x,y,AToleranceID::None);
BBB 7011 06-Jan-12: 
BBB 7011 06-Jan-12:     setAndAddEntity(line);
AAA  772 06-Aug-02:     }
现在我可以看到影响这一系列行的先前变更集是6989。等等

如果有一个可视化的工具可以做到这一点,那就太好了,但是我会很高兴看到一些东西,它给了我变更集的序列:70116989,等等

过滤行号范围的注释输出并找到最大变更集编号并不困难。困难的是调整行的范围以考虑添加和删除的行,特别是当“diff”声称更改跨越了行范围的最小值或最大值时。至少对于CVS diff输出来说这很难,我还没有尝试过使用hg diff的输出

如果我梦寐以求的工具/扩展不存在,那么至少有计算修改后的行号的工具吗


谢谢,

它不是为它而构建的,但是您可以使用
hg grep
来搜索
,这意味着regexp中的任何内容。这将得到如下输出:

ry4an@four:~/projects/unblog$ hg grep --all --user --date . config.yaml 
config.yaml:79:-:ry4an-hg:Mon Apr 23 22:45:24 2012 -0400:TAGLINE: I think in a monospaced font.
config.yaml:79:+:ry4an-hg:Mon Apr 23 22:45:24 2012 -0400:TAGLINE: A blog about software, projects, and other little things I build.
config.yaml:52:-:ry4an-hg:Sat Apr 30 11:25:08 2011 -0500:AUTHOR: Ry4an Brase
config.yaml:52:-:ry4an-hg:Sat Apr 30 11:25:08 2011 -0500:#DISQUS: rafaelmartins-en
config.yaml:52:-:ry4an-hg:Sat Apr 30 11:25:08 2011 -0500:TIMEZONE: UTC
config.yaml:52:+:ry4an-hg:Sat Apr 30 11:25:08 2011 -0500:#POSTS_PER_PAGE: 10
config.yaml:52:+:ry4an-hg:Sat Apr 30 11:25:08 2011 -0500:AUTHOR: Ry4an Brase
config.yaml:52:+:ry4an-hg:Sat Apr 30 11:25:08 2011 -0500:#DISQUS: your-disqus-id
config.yaml:52:+:ry4an-hg:Sat Apr 30 11:25:08 2011 -0500:TIMEZONE: UTC
config.yaml:0:+:ry4an-hg:Sat Jan 22 22:51:22 2011 -0600:TITLE: Ry4an's Unblog
config.yaml:0:+:ry4an-hg:Sat Jan 22 22:51:22 2011 -0600:TITLE_HTML: Ry4an's Unblog
config.yaml:0:+:ry4an-hg:Sat Jan 22 22:51:22 2011 -0600:TAGLINE: I think in a monospaced font.
config.yaml:0:+:ry4an-hg:Sat Jan 22 22:51:22 2011 -0600:AUTHOR: Ry4an Brase
config.yaml:0:+:ry4an-hg:Sat Jan 22 22:51:22 2011 -0600:#DISQUS: rafaelmartins-en
config.yaml:0:+:ry4an-hg:Sat Jan 22 22:51:22 2011 -0600:TIMEZONE: UTC

其中,
+
表示添加了一行,
-
表示删除了该行。
--all
选项意味着显示所有匹配项,而不仅仅是每行最近的匹配项。

它不是为它而构建的,但是您可以通过使用
hg grep
搜索
,这意味着regexp中的任何内容。这将得到如下输出:

ry4an@four:~/projects/unblog$ hg grep --all --user --date . config.yaml 
config.yaml:79:-:ry4an-hg:Mon Apr 23 22:45:24 2012 -0400:TAGLINE: I think in a monospaced font.
config.yaml:79:+:ry4an-hg:Mon Apr 23 22:45:24 2012 -0400:TAGLINE: A blog about software, projects, and other little things I build.
config.yaml:52:-:ry4an-hg:Sat Apr 30 11:25:08 2011 -0500:AUTHOR: Ry4an Brase
config.yaml:52:-:ry4an-hg:Sat Apr 30 11:25:08 2011 -0500:#DISQUS: rafaelmartins-en
config.yaml:52:-:ry4an-hg:Sat Apr 30 11:25:08 2011 -0500:TIMEZONE: UTC
config.yaml:52:+:ry4an-hg:Sat Apr 30 11:25:08 2011 -0500:#POSTS_PER_PAGE: 10
config.yaml:52:+:ry4an-hg:Sat Apr 30 11:25:08 2011 -0500:AUTHOR: Ry4an Brase
config.yaml:52:+:ry4an-hg:Sat Apr 30 11:25:08 2011 -0500:#DISQUS: your-disqus-id
config.yaml:52:+:ry4an-hg:Sat Apr 30 11:25:08 2011 -0500:TIMEZONE: UTC
config.yaml:0:+:ry4an-hg:Sat Jan 22 22:51:22 2011 -0600:TITLE: Ry4an's Unblog
config.yaml:0:+:ry4an-hg:Sat Jan 22 22:51:22 2011 -0600:TITLE_HTML: Ry4an's Unblog
config.yaml:0:+:ry4an-hg:Sat Jan 22 22:51:22 2011 -0600:TAGLINE: I think in a monospaced font.
config.yaml:0:+:ry4an-hg:Sat Jan 22 22:51:22 2011 -0600:AUTHOR: Ry4an Brase
config.yaml:0:+:ry4an-hg:Sat Jan 22 22:51:22 2011 -0600:#DISQUS: rafaelmartins-en
config.yaml:0:+:ry4an-hg:Sat Jan 22 22:51:22 2011 -0600:TIMEZONE: UTC

其中,
+
表示添加了一行,
-
表示删除了该行。
--all
选项意味着显示所有匹配项,而不仅仅是每行最近的匹配项。

要分析单个文件的历史记录,我使用TortoiseHg。我从特定版本的文件的注释版本开始,然后切换到文件历史记录,然后继续DAG。不是像你想的那样自动化,但确实如此。为了分析单个文件的历史记录,我使用了Ortoisehg。我从特定版本的文件的注释版本开始,然后切换到文件历史记录,然后继续DAG。虽然没有你想要的那么自动化,但确实做到了。
hg-grep
没有帮助。我不是在寻找包含正则表达式的更改。我想要在一个行范围内发生的任何更改。对,但是通过使用regex
(所有内容)并传入
--all
,可以获得该文件每个版本中所有行的所有更改。这是不完美的,但它是你将得到的最好的。
hg-grep
没有帮助。我不是在寻找包含正则表达式的更改。我想要在一个行范围内发生的任何更改。对,但是通过使用regex
(所有内容)并传入
--all
,可以获得该文件每个版本中所有行的所有更改。虽然不完美,但这是你能得到的最好的。