开发者

Mercurial nested subrepos (subrepos in subrepos) not recursively commiting?

开发者 https://www.devze.com 2023-01-03 19:44 出处:网络
I\'ve got a Mercurial repo set up like this, with a subrepo inside another subrepo: Root .hg .hgsub .hgsubstate

I've got a Mercurial repo set up like this, with a subrepo inside another subrepo:

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

If I change foo.txt and bar.txt and commit from inside Root then all is well and all the nested subrepos commit. However if I only change bar.txt and commit from Root then Hg thinks nothing is changed. I have to commit from inside Nested to get the FurtherNested changes to commit when there are only changes in FurtherNested. It seems that in order for nested subrepos to work, each nested level has to contain changes in order for the recursion 开发者_运维问答to work.

Nothing I read in the Mercurial docs on subrepos seemed to imply that subrepo commits would only propagate if there were changes. In fact it says the opposite:

When we commit, Mercurial will attempt to recursively commit in all defined subrepos...

So my question is, is this to be expected or is something broken or just not done yet (Mercurial 1.5.4 on Windows)?


Looks to me like this is just something that's broken. The relevant source code (in subrepo.py) doesn't seem to recurse into subsubrepos, viz:

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

Probably wouldn't be too hard to fix, though I don't know the code intimately enough yet. It would probably be worthwhile posting on the Mercurial mailing list and/or filing a bug. I doubt Matt and Benoit are reading this, but they definitely do read everything posted there.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号