[PATCH remotenames V2] initialization: lazy-load all remotenames

ttung at fb.com ttung at fb.com
Tue Jul 5 20:07:34 EDT 2016


# HG changeset patch
# User Tony Tung <tonytung at merly.org>
# Date 1467763493 25200
#      Tue Jul 05 17:04:53 2016 -0700
# Node ID e33e08fbe2d7f15ff7776d3f60497792cc1a0bf5
# Parent  183d5b47f7472b839a96e7be735bb7fbf8068969
initialization: lazy-load all remotenames

If the command doesn't actually require the remotenames to be loaded, this saves 100ms.

Things that I've based this number on: 5 runs each of hg status, hg bookmark.

diff --git a/remotenames.py b/remotenames.py
--- a/remotenames.py
+++ b/remotenames.py
@@ -224,10 +224,16 @@
         self.potentialentries = {}
         self._kind = kind # bookmarks or branches
         self._repo = repo
-        self._load()
+        self.loaded = False
 
-    def _load(self):
-        """Read the remotenames file, store entries matching selected kind"""
+    def _ensureloaded(self):
+        """Read the remotenames file, store entries matching selected kind.
+        This only takes effect once.   Subsequent invocations do not have any
+        effect."""
+        if self.loaded is True:
+            return
+        self.loaded = True
+
         repo = self._repo
         alias_default = repo.ui.configbool('remotenames', 'alias.default')
         for node, nametype, remote, rname in readremotenames(repo):
@@ -242,6 +248,8 @@
 
     def _resolvedata(self, potentialentry):
         """Check that the node for potentialentry exists and return it"""
+        self._ensureloaded()
+
         if not potentialentry in self.potentialentries:
             return None
         node, nametype, remote, rname = self.potentialentries[potentialentry]
@@ -276,6 +284,7 @@
             return None
 
     def keys(self):
+        self._ensureloaded()
         for u in self.potentialentries.keys():
             self._fetchandcache(u)
         return self.cache.keys()


More information about the Mercurial-devel mailing list