Mercurial嵌套子报表(子报表中的子报表)不是递归提交的?

时间:2010-06-18 21:17:24

标签: mercurial subrepos

我有一个像这样设置的Mercurial仓库,其中一个子仓位在另一个子仓库中:

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

如果我更改foo.txt和bar.txt并从Root内部提交,那么一切都很好,并且所有嵌套的子目录都提交。但是,如果我只改变bar.txt并从Root提交,那么Hg认为没有任何改变。我必须从Nested内部提交,以便在FurtherNested中只有更改时提交FurtherNested更改。似乎为了使嵌套子实例工作,每个嵌套级别必须包含更改,以便递归起作用。

我在Merbulial文档中读到的关于subrepos的内容似乎并不意味着subrepo提交只会在有变化的情况下传播。事实上,它恰恰相反:

  

当我们提交时,Mercurial会尝试   以递归方式提交所有已定义的   subrepos ...

所以我的问题是,这是预期的还是已经破坏或者还没有完成(Windows上的Mercurial 1.5.4)?

1 个答案:

答案 0 :(得分: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上发布和/或提交错误。我怀疑Matt和Benoit正在阅读这篇文章,但他们肯定会阅读那里发布的所有内容。