changeset 51422:3cee8706f53b

phases: directly update the phase sets in advanceboundary This is similar to what we do in retractboundary. There is no need to invalidate the cache if we have everything at hand to update it.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Fri, 23 Feb 2024 06:37:25 +0100
parents 23950e39281f
children 7c6d0b9dde37
files mercurial/phases.py
diffstat 1 files changed, 9 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/phases.py	Fri Feb 23 05:25:35 2024 +0100
+++ b/mercurial/phases.py	Fri Feb 23 06:37:25 2024 +0100
@@ -769,19 +769,26 @@
         if not dryrun:
             for r, p in changed.items():
                 _trackphasechange(phasetracking, r, p, targetphase)
+            if targetphase > public:
+                self._phasesets[targetphase].update(changed)
             for phase in affectable_phases:
                 roots = self._phaseroots[phase]
                 removed = roots & delroots
                 if removed or new_roots[phase]:
+                    self._phasesets[phase].difference_update(changed)
                     # Be careful to preserve shallow-copied values: do not
                     # update phaseroots values, replace them.
                     final_roots = roots - delroots | new_roots[phase]
-                    self._updateroots(repo, phase, final_roots, tr)
+                    self._updateroots(
+                        repo, phase, final_roots, tr, invalidate=False
+                    )
             if new_target_roots:
                 # Thanks for previous filtering, we can't replace existing
                 # roots
                 new_target_roots |= self._phaseroots[targetphase]
-                self._updateroots(repo, targetphase, new_target_roots, tr)
+                self._updateroots(
+                    repo, targetphase, new_target_roots, tr, invalidate=False
+                )
             repo.invalidatevolatilesets()
         return changed