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 {} |