我有一个bug存在于一个变更集中,但不存在于其父集合中。 mercurial中是否有一些功能,我可以以较小的增量“更新”,以查看问题的开始位置?
例如,如果diff是函数A,B和C的更改,我会在完成每个更改后运行测试套件,以尝试诊断问题。
答案 0 :(得分:1)
答案是:这取决于你愿意投入多少手工劳动。
所能做的就是卷起袖子,在交互模式下使用阁楼扩展。如果你正在使用TortoiseHg,你已经拥有它,只需运行hgtk shelve
,它就可以让你一次围绕一个差异块移动更改。 (一个大块是一组连续的线差异)
还有很多其他差异修补工具可以为您提供单一分辨率。如果您需要更多详细信息,请告诉我们。
为了好玩,我们来谈谈像bisect
这样的自动化解决方案是不可能的,因为半个变更集仍然应该编译并不总是有意义的。更糟糕的是,如果他们编译,但有逻辑错误怎么办?这是一个简单的最坏情况......
void main(){
Foo *x = malloc(128);
frobFoo(&x);
- free(x); //line 4 removed in changeset
}
void frobFoo(Foo ** x){
+ free(*x); //line 8 added in changeset
}
答案 1 :(得分:0)
您可以使用hg diff -r firstrev -r secondrev
并仅将输出过滤到与这些功能相关的位,然后逐个逐步执行修补程序。
或者您可以使用为此目的而设计的bisect扩展 - 尽管它会为您提供对代码库所做的所有更改,而不仅仅是针对特定功能的更改。您可以通过仅提取更改功能的转速然后仅对这些修订进行二分搜索来改善这一点。