2010-06-18 27 views
2

J'ai une prise en pension Mercurial mis en place comme celui-ci, avec un subrepo dans un autre subrepo:Les sous-états imbriqués Mercurial (subrepos in subrepos) ne sont pas récursifs?

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

Si je change foo.txt et bar.txt et commets à l'intérieur Racine tout va bien et tous les commit subrepos imbriqué. Cependant, si je ne change que bar.txt et commit de Root, alors Hg pense que rien n'est changé. Je dois commettre de l'intérieur de Nested pour obtenir les modifications FurtherNested à commettre quand il n'y a que des changements dans FurtherNested. Il semble que pour que les sous-états imbriqués fonctionnent, chaque niveau imbriqué doit contenir des changements pour que la récursivité fonctionne. Rien de ce que je lisais dans les documents Mercurial sur les sous-états ne semblait impliquer que les commits subrepo ne se propageaient que s'il y avait des changements. En fait, il dit le contraire:

Lorsque nous nous engageons, Mercurial va tenter de commettre récursive dans tous définis subrepos ...

Ma question est, est-ce à prévoir ou est quelque chose de cassé ou pas encore fini (Mercurial 1.5.4 sous Windows)?

+0

Déposer un rapport de bogue, me semble * borken *. :) –

Répondre

2

Il me semble que c'est juste quelque chose qui est cassé. Le code source pertinente (en subrepo.py) ne semble pas récursif en subsubrepos, à savoir:

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 

ne serait probablement pas trop difficile à corriger, mais je ne sais pas le code assez intimement encore. Il serait probablement utile de poster sur le Mercurial mailing list et/ou de déposer un bug. Je doute que Matt et Benoit lisent ceci, mais ils lisent définitivement tout ce qui y est posté.

+0

Donc, pour suivre, comme vous l'avez découvert en postant sur la liste de diffusion, cela a été corrigé dans la version 1.6 en changeant le comportement de w.dirty(). Mon mal de ne pas penser qu'ils pourraient avoir capturé cela à l'intérieur 'le répertoire de travail a-t-il changé?'. –