localrepo: move extension loading to a separate method
authorJun Wu <quark@fb.com>
Wed, 15 Feb 2017 19:41:14 -0800
changeset 31009 74af89c66834
parent 31008 d194f0dba7ac
child 31010 cb899ee133d8
localrepo: move extension loading to a separate method The stateful chg plan [1] requires a special repo object, where ideally all side effects caused by loading the repo object could be reverted by just dropping (gabbage collect) the loaded repo object. Currently, that is impossible because repo.__init__ calls "extensions.loadall", which may have unpredictable side-effects that cannot be reverted by dropping the repo object. This patch moves "extensions.loadall" to a separate method, so chg could subclass localrepository and make extensions loading a no-op. [1]: mercurial-scm.org/pipermail/mercurial-devel/2017-February/092547.html
mercurial/localrepo.py
--- a/mercurial/localrepo.py	Thu Feb 16 17:30:35 2017 +0530
+++ b/mercurial/localrepo.py	Wed Feb 15 19:41:14 2017 -0800
@@ -270,7 +270,7 @@
         self._phasedefaults = []
         try:
             self.ui.readconfig(self.join("hgrc"), self.root)
-            extensions.loadall(self.ui)
+            self._loadextensions()
         except IOError:
             pass
 
@@ -371,6 +371,9 @@
     def close(self):
         self._writecaches()
 
+    def _loadextensions(self):
+        extensions.loadall(self.ui)
+
     def _writecaches(self):
         if self._revbranchcache:
             self._revbranchcache.write()