2010-07-15 76 views
1

我有一個bug存在於一個變更集中,但不是它的父項。在mercurial中有一些功能,我可以以更小的增量「更新」,查看問題出現在哪裏?Hg:逐行級別更新?

例如,如果差異是函數A,B和C的變化,我會在做出每一項更改後運行測試套件,以嘗試診斷問題。

+0

平分得到了下面,因爲它僅是變更水平擊落,但我會指出,很多小的提交是首選更少,更大的承諾正是因爲類似的事情平分(和一般來說合並)更難以處理更大的變更。 – 2010-07-15 04:47:52

回答

0

您可以使用hg diff -r firstrev -r secondrev並將輸出過濾爲僅涉及這些功能的位,然後逐個逐個修補。

或者您可以使用爲此目的而設計的bisect擴展 - 儘管它會給您對代碼庫所做的所有更改,而不僅僅是關於特定功能的更改。您只需提取改變功能的轉速,然後僅對這些修訂進行二分搜索,即可改善此情況。

+0

我認爲bisect在長時間級別上工作,而不是逐行級別。 – 2010-07-15 03:28:12

+0

bisect只能在更改集級別上工作 – heckj 2010-07-15 03:34:09

+0

是的,我知道bisect是通過更改而改變的。我知道。 – Borealid 2010-07-15 03:37:55

1

答案是:這取決於你有多少體力活都願意把

什麼你可以要做的就是捲起你的袖子,使用交互模式閣樓擴展。如果您使用的是TortoiseHg,那麼您已經擁有它了,只需運行hgtk shelve,它可以讓您一次移動一個diff區塊。 (大塊是一組連續的線差異)

還有很多其他差​​異補丁工具,可以給你一個大塊的分辨率。讓我知道你是否需要更多細節。

只是爲了好玩,讓我們來談談如何自動化的解決方案如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 
}