##// END OF EJS Templates
phases: gather the logic for phasesets update in a single method...
marmoute -
r52308:1df8d84e default
parent child Browse files
Show More
@@ -383,10 +383,7 b' class phasecache:'
383 def hasnonpublicphases(self, repo: "localrepo.localrepository") -> bool:
383 def hasnonpublicphases(self, repo: "localrepo.localrepository") -> bool:
384 """detect if there are revisions with non-public phase"""
384 """detect if there are revisions with non-public phase"""
385 repo = repo.unfiltered()
385 repo = repo.unfiltered()
386 cl = repo.changelog
386 self._ensure_phase_sets(repo)
387 if len(cl) > self._loadedrevslen:
388 self.invalidate()
389 self.loadphaserevs(repo)
390 return any(
387 return any(
391 revs for phase, revs in self._phaseroots.items() if phase != public
388 revs for phase, revs in self._phaseroots.items() if phase != public
392 )
389 )
@@ -400,10 +397,7 b' class phasecache:'
400 descendants of draft revisions, their roots will still be present.
397 descendants of draft revisions, their roots will still be present.
401 """
398 """
402 repo = repo.unfiltered()
399 repo = repo.unfiltered()
403 cl = repo.changelog
400 self._ensure_phase_sets(repo)
404 if len(cl) > self._loadedrevslen:
405 self.invalidate()
406 self.loadphaserevs(repo)
407 return set().union(
401 return set().union(
408 *[
402 *[
409 revs
403 revs
@@ -420,7 +414,7 b' class phasecache:'
420 ) -> Any:
414 ) -> Any:
421 # TODO: finish typing this
415 # TODO: finish typing this
422 """return a smartset for the given phases"""
416 """return a smartset for the given phases"""
423 self.loadphaserevs(repo) # ensure phase's sets are loaded
417 self._ensure_phase_sets(repo) # ensure phase's sets are loaded
424 phases = set(phases)
418 phases = set(phases)
425 publicphase = public in phases
419 publicphase = public in phases
426
420
@@ -511,14 +505,20 b' class phasecache:'
511 self._phasesets[phase] = ps
505 self._phasesets[phase] = ps
512 self._loadedrevslen = len(cl)
506 self._loadedrevslen = len(cl)
513
507
514 def loadphaserevs(self, repo: "localrepo.localrepository") -> None:
508 def _ensure_phase_sets(self, repo: "localrepo.localrepository") -> None:
515 """ensure phase information is loaded in the object"""
509 """ensure phase information is loaded in the object and up to date"""
510 update = False
516 if self._phasesets is None:
511 if self._phasesets is None:
512 update = True
513 elif len(repo.changelog) > self._loadedrevslen:
514 update = True
515 if update:
517 try:
516 try:
518 res = self._getphaserevsnative(repo)
517 res = self._getphaserevsnative(repo)
519 self._loadedrevslen, self._phasesets = res
518 self._loadedrevslen, self._phasesets = res
520 except AttributeError:
519 except AttributeError:
521 self._computephaserevspure(repo)
520 self._computephaserevspure(repo)
521 assert self._loadedrevslen == len(repo.changelog)
522
522
523 def invalidate(self):
523 def invalidate(self):
524 self._loadedrevslen = 0
524 self._loadedrevslen = 0
@@ -534,9 +534,10 b' class phasecache:'
534 return public
534 return public
535 if rev < nullrev:
535 if rev < nullrev:
536 raise ValueError(_(b'cannot lookup negative revision'))
536 raise ValueError(_(b'cannot lookup negative revision'))
537 # double check self._loadedrevslen to avoid an extra method call as
538 # python is slow for that.
537 if rev >= self._loadedrevslen:
539 if rev >= self._loadedrevslen:
538 self.invalidate()
540 self._ensure_phase_sets(repo)
539 self.loadphaserevs(repo)
540 for phase in trackedphases:
541 for phase in trackedphases:
541 if rev in self._phasesets[phase]:
542 if rev in self._phasesets[phase]:
542 return phase
543 return phase
General Comments 0
You need to be logged in to leave comments. Login now