Ртутные вложенные подпункты (subrepos в subrepos), не рекурсивно совершающие? - PullRequest
2 голосов
/ 19 июня 2010

У меня есть репозиторий 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, чтобы получить изменения в ContinNested для фиксации, когда есть только изменения в AdditionalNested. Похоже, что для работы вложенных вложенных элементов каждый вложенный уровень должен содержать изменения, чтобы рекурсия работала.

Ничто из того, что я читал в документах Mercurial по субрепозам, казалось, не подразумевало, что коммиты субрепо будут распространяться только при наличии изменений. На самом деле это говорит об обратном:

Когда мы совершим, Mercurial попытается рекурсивно фиксировать во всех определенных subrepos ...

Так что мой вопрос: это ожидать или что-то сломалось или просто еще не сделано (Mercurial 1.5.4 в Windows)?

1 Ответ

2 голосов
/ 27 июля 2010

Похоже, это просто что-то сломалось.Соответствующий исходный код (в 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 и / или регистрировать ошибку.Я сомневаюсь, что Мэтт и Бенуа читают это, но они определенно читают все, что там было.

...