[PATCH 2 of 2] phase: default to C implementation for phase computation
Laurent Charignon
lcharignon at fb.com
Fri Mar 20 16:08:20 CDT 2015
# HG changeset patch
# User Laurent Charignon <lcharignon at fb.com>
# Date 1426875267 25200
# Fri Mar 20 11:14:27 2015 -0700
# Node ID 101984a739d0f3dc9b614f209e36088a6da21b86
# Parent 1c9600e6ceab57b48827292c7b01ed9a625da1fd
phase: default to C implementation for phase computation
diff --git a/mercurial/phases.py b/mercurial/phases.py
--- a/mercurial/phases.py
+++ b/mercurial/phases.py
@@ -172,19 +172,29 @@
for a in 'phaseroots dirty opener _phaserevs'.split():
setattr(self, a, getattr(phcache, a))
+ def getphaserevsnative(self, repo):
+ repo = repo.unfiltered()
+ nativeroots = []
+ for phase in trackedphases:
+ nativeroots.append(map(repo.changelog.rev, self.phaseroots[phase]))
+ return repo.changelog.computephases(nativeroots)
+
def getphaserevs(self, repo):
if self._phaserevs is None:
- repo = repo.unfiltered()
- revs = [public] * len(repo.changelog)
- self._phaserevs = revs
- self._populatephaseroots(repo)
- for phase in trackedphases:
- roots = map(repo.changelog.rev, self.phaseroots[phase])
- if roots:
- for rev in roots:
- revs[rev] = phase
- for rev in repo.changelog.descendants(roots):
- revs[rev] = phase
+ try:
+ self._phaserevs = self.getphaserevsnative(repo)
+ except AttributeError:
+ repo = repo.unfiltered()
+ revs = [public] * len(repo.changelog)
+ self._phaserevs = revs
+ self._populatephaseroots(repo)
+ for phase in trackedphases:
+ roots = map(repo.changelog.rev, self.phaseroots[phase])
+ if roots:
+ for rev in roots:
+ revs[rev] = phase
+ for rev in repo.changelog.descendants(roots):
+ revs[rev] = phase
return self._phaserevs
def invalidate(self):
diff --git a/mercurial/revlog.py b/mercurial/revlog.py
--- a/mercurial/revlog.py
+++ b/mercurial/revlog.py
@@ -724,6 +724,9 @@
except AttributeError:
return self._headrevs()
+ def computephases(self, roots):
+ return self.index.computephases(roots)
+
def _headrevs(self):
count = len(self)
if not count:
More information about the Mercurial-devel
mailing list