context: use unfiltered repo for '.'
authorMartin von Zweigbergk <martinvonz@google.com>
Thu, 20 Nov 2014 12:15:12 -0800
changeset 24050 a9b61dbdb827
parent 24049 ba272156113f
child 24051 7956d17431bc
context: use unfiltered repo for '.' There is no reason to read obsolescence markers when doing a plain 'hg status' without --rev. Use the unfiltered repo when initializing context._rev to speed things up. This speeds up 'hg status' from 1.342s to 0.080s on my repo with ~110k markers.
mercurial/context.py
--- a/mercurial/context.py	Thu Feb 05 14:09:08 2015 -0800
+++ b/mercurial/context.py	Thu Nov 20 12:15:12 2014 -0800
@@ -376,10 +376,6 @@
                 return
             if isinstance(changeid, long):
                 changeid = str(changeid)
-            if changeid == '.':
-                self._node = repo.dirstate.p1()
-                self._rev = repo.changelog.rev(self._node)
-                return
             if changeid == 'null':
                 self._node = nullid
                 self._rev = nullrev
@@ -388,6 +384,12 @@
                 self._node = repo.changelog.tip()
                 self._rev = repo.changelog.rev(self._node)
                 return
+            if changeid == '.' or changeid == repo.dirstate.p1():
+                # this is a hack to delay/avoid loading obsmarkers
+                # when we know that '.' won't be hidden
+                self._node = repo.dirstate.p1()
+                self._rev = repo.unfiltered().changelog.rev(self._node)
+                return
             if len(changeid) == 20:
                 try:
                     self._node = changeid