mercurial/phases.py
changeset 51420 ac1c75188440
parent 51419 e57d4b868a3e
child 51421 2eb93812d2a5
equal deleted inserted replaced
51419:e57d4b868a3e 51420:ac1c75188440
   622             for r in sorted(roots):
   622             for r in sorted(roots):
   623                 h = to_node(r)
   623                 h = to_node(r)
   624                 fp.write(b'%i %s\n' % (phase, hex(h)))
   624                 fp.write(b'%i %s\n' % (phase, hex(h)))
   625         self.dirty = False
   625         self.dirty = False
   626 
   626 
   627     def _updateroots(self, repo, phase, newroots, tr):
   627     def _updateroots(self, repo, phase, newroots, tr, invalidate=True):
   628         self._phaseroots[phase] = newroots
   628         self._phaseroots[phase] = newroots
   629         self.invalidate()
       
   630         self.dirty = True
   629         self.dirty = True
       
   630         if invalidate:
       
   631             self.invalidate()
   631 
   632 
   632         assert repo.filtername is None
   633         assert repo.filtername is None
   633         wrepo = weakref.ref(repo)
   634         wrepo = weakref.ref(repo)
   634 
   635 
   635         def tr_write(fp):
   636         def tr_write(fp):
   809                 if p_phase == targetphase:
   810                 if p_phase == targetphase:
   810                     if p_phase > r_phase:
   811                     if p_phase > r_phase:
   811                         changed_revs[r] = r_phase
   812                         changed_revs[r] = r_phase
   812                     elif r in currentroots:
   813                     elif r in currentroots:
   813                         replaced_roots.add(r)
   814                         replaced_roots.add(r)
       
   815             sets = self._phasesets
       
   816             sets[targetphase].update(changed_revs)
       
   817             for r, old in changed_revs.items():
       
   818                 if old > public:
       
   819                     sets[old].discard(r)
   814 
   820 
   815         if new_roots:
   821         if new_roots:
   816             assert changed_revs
   822             assert changed_revs
       
   823 
   817             final_roots = new_roots | currentroots - replaced_roots
   824             final_roots = new_roots | currentroots - replaced_roots
   818             self._updateroots(repo, targetphase, final_roots, tr)
   825             self._updateroots(
       
   826                 repo,
       
   827                 targetphase,
       
   828                 final_roots,
       
   829                 tr,
       
   830                 invalidate=False,
       
   831             )
   819             if targetphase > 1:
   832             if targetphase > 1:
   820                 retracted = set(changed_revs)
   833                 retracted = set(changed_revs)
   821                 for lower_phase in range(1, targetphase):
   834                 for lower_phase in range(1, targetphase):
   822                     lower_roots = self._phaseroots.get(lower_phase)
   835                     lower_roots = self._phaseroots.get(lower_phase)
   823                     if lower_roots is None:
   836                     if lower_roots is None:
   824                         continue
   837                         continue
   825                     if lower_roots & retracted:
   838                     if lower_roots & retracted:
   826                         simpler_roots = lower_roots - retracted
   839                         simpler_roots = lower_roots - retracted
   827                         self._updateroots(repo, lower_phase, simpler_roots, tr)
   840                         self._updateroots(
       
   841                             repo,
       
   842                             lower_phase,
       
   843                             simpler_roots,
       
   844                             tr,
       
   845                             invalidate=False,
       
   846                         )
   828             return changed_revs
   847             return changed_revs
   829         else:
   848         else:
   830             assert not changed_revs
   849             assert not changed_revs
   831             assert not replaced_roots
   850             assert not replaced_roots
   832             return {}
   851             return {}