2

我有一个像这样设置的 Mercurial 存储库,在另一个子存储库中有一个子存储库:

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

如果我更改 foo.txt 和 bar.txt 并从 Root 内部提交,那么一切都很好,所有嵌套的子存储库都提交。但是,如果我只更改 bar.txt 并从 Root 提交,那么 Hg 认为没有任何改变。当FurtherNested 中只有更改时,我必须从Nested 内部提交才能提交FurtherNested 更改。似乎为了使嵌套的子存储库工作,每个嵌套级别都必须包含更改才能使递归工作。

我在关于 subrepos 的 Mercurial 文档中读到的任何内容似乎都没有暗示 subrepo 提交只会在发生更改时传播。事实上,它说的是相反的:

当我们提交时,Mercurial 将尝试在所有已定义的子存储库中递归提交...

所以我的问题是,这是可以预料的,还是有问题或尚未完成(Windows 上的 Mercurial 1.5.4)?

4

1 回答 1

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 邮件列表上发布和/或提交错误可能是值得的。我怀疑 Matt 和 Benoit 是否正在阅读这篇文章,但他们肯定会阅读那里发布的所有内容。

于 2010-07-27T18:46:42.747 回答