2

別のサブレポ内にサブレポがある、このようにセットアップされた Mercurial レポがあります。

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

foo.txt と bar.txt を変更してルート内からコミットすると、すべてがうまくいき、ネストされたすべてのサブリポジトリがコミットされます。ただし、bar.txt のみを変更して Root からコミットすると、Hg は何も変更されていないと見なします。FurtherNestedに変更しかない場合、FurtherNestedの変更をコミットするには、Nested内からコミットする必要があります。ネストされたサブリポジトリが機能するためには、再帰が機能するために、ネストされた各レベルに変更が含まれている必要があるようです。

サブレポに関する Mercurial のドキュメントを読んでも、変更があった場合にのみサブレポのコミットが伝播することを暗示しているようには見えませんでした。実際、それは反対のことを言っています:

コミットすると、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 に答える