2010-06-18 53 views
2

我有一個水銀回購成立這樣,與其他subrepo內subrepo:Mercurial嵌套subrepos(subrepos中的subrepos)不是遞歸提交?

Root 
    .hg 
    .hgsub 
    .hgsubstate 
    Nested 
    .hg 
    .hgsub 
    .hgsubstate 
    foo.txt 
    FurtherNested 
    .hg 
    bar.txt 

如果我改變foo.txt的和跳回到bar.txt和內部根犯那麼一切都很好,所有的嵌套subrepos提交。但是,如果我只改變bar.txt並從Root提交,那麼Hg認爲沒有任何改變。我必須從Nested內部進行提交,以便在FurtherNested中只有更改時進行FurtherNested更改。看起來,爲了使嵌套subrepos正常工作,每個嵌套級別必須包含更改才能使遞歸正常工作。

我在subrepos的Mercurial文檔中讀到的東西似乎暗示subrepo提交只會在有變化時纔會傳播。事實上,它說的正好相反:

當我們承諾,水銀會嘗試 在所有定義 subrepos遞歸提交...

所以我的問題是,這是可以預期或有些東西壞了或者還沒有完成(Windows上的Mercurial 1.5.4)?

+0

提交錯誤報告,聲音* borken *給我。 :) – 2010-07-28 21:48:37

回答

2

在我看來,這只是一些破碎的東西。相關的源代碼(在subrepo.py)似乎沒有遞歸到subsubrepos,即:

def dirty(self): 
    r = self._state[1] 
    if r == '': 
     return True 
    w = self._repo[None] 
    if w.p1() != self._repo[r]: # version checked out change 
     return True 
    return w.dirty() # working directory changed 

也許不會太很難解決,但我不知道代碼密切夠了嗎。這可能是值得在Mercurial mailing list張貼和/或提交一個錯誤。我懷疑馬特和貝諾特正在閱讀這篇文章,但他們肯定會閱讀那裏發佈的所有內容。

+0

因此,爲了跟進,正如您在郵件列表中發現的那樣,通過更改w.dirty()的行爲在1.6中修復了此問題。我不想因爲他們可能在內部捕獲了這個「工作目錄改變了嗎?」。 – 2010-07-29 19:06:31

相關問題