diff --git a/eden/scm/edenscm/mercurial/dispatch.py b/eden/scm/edenscm/mercurial/dispatch.py index a1789fbe23..8b84436d40 100644 --- a/eden/scm/edenscm/mercurial/dispatch.py +++ b/eden/scm/edenscm/mercurial/dispatch.py @@ -999,8 +999,6 @@ def _getlocal(ui, rpath): if path: lui.reloadconfigs(path) - uiconfig.validatedynamicconfig(lui) - return path, lui diff --git a/eden/scm/edenscm/mercurial/localrepo.py b/eden/scm/edenscm/mercurial/localrepo.py index 746331a0b6..9f554bdd85 100644 --- a/eden/scm/edenscm/mercurial/localrepo.py +++ b/eden/scm/edenscm/mercurial/localrepo.py @@ -432,7 +432,6 @@ class localrepository(object): # If the repo already exists, load the existing configs if self.localvfs.isdir(): self.ui.reloadconfigs(self.root) - uiconfig.validatedynamicconfig(self.ui) elif create: # If we're in the process of creating the repo, load the dynamic configs in # memory only. They will be written to disk later once the localvfs diff --git a/eden/scm/edenscm/mercurial/ui.py b/eden/scm/edenscm/mercurial/ui.py index df48bb5bc3..0033668240 100644 --- a/eden/scm/edenscm/mercurial/ui.py +++ b/eden/scm/edenscm/mercurial/ui.py @@ -254,12 +254,12 @@ class ui(object): def load(cls, repopath=None): """Create a ui and load global and user configs""" u = cls() - u._uiconfig = uiconfig.uiconfig.load(repopath) + uiconfig.uiconfig.load(u, repopath) return u def reloadconfigs(self, repopath=None): # repopath should be the non-shared repo path without .hg/ - self._uiconfig.reload(repopath) + self._uiconfig.reload(self, repopath) def copy(self): return self.__class__(self) diff --git a/eden/scm/edenscm/mercurial/uiconfig.py b/eden/scm/edenscm/mercurial/uiconfig.py index d2ae5b4dab..6178389ec4 100644 --- a/eden/scm/edenscm/mercurial/uiconfig.py +++ b/eden/scm/edenscm/mercurial/uiconfig.py @@ -117,7 +117,7 @@ class uiconfig(object): self._knownconfig = configitems.coreitems @classmethod - def load(cls, repopath): + def load(cls, ui, repopath): """Create a uiconfig and load global and user configs""" u = cls() try: @@ -126,14 +126,20 @@ class uiconfig(object): rcfg = configparser.config.load(dothgpath) except Exception as ex: raise error.ParseError(str(ex)) + u._rcfg = localrcfg(rcfg) + ui._uiconfig = u + if repopath is not None: + validatedynamicconfig(ui) + root = os.path.expanduser("~") u.fixconfig(root=repopath or root) - return u - def reload(self, repopath): + def reload(self, ui, repopath): # The actual config expects the non-shared .hg directory. self._rcfg.reload(os.path.join(repopath, ".hg"), list(self._pinnedconfigs)) + validatedynamicconfig(ui) + # fixconfig expects the non-shard repo root, without the .hg. self.fixconfig(root=repopath) diff --git a/eden/scm/tests/test-debugdynamicconfig.t b/eden/scm/tests/test-debugdynamicconfig.t index feee9547ec..4b189374ad 100644 --- a/eden/scm/tests/test-debugdynamicconfig.t +++ b/eden/scm/tests/test-debugdynamicconfig.t @@ -153,6 +153,7 @@ Verify we load and verify dynamicconfigs during clone > EOF $ hg clone ssh://user@dummy/server client2 --configfile $TESTTMP/good_hgrc --config configs.testdynamicconfigsubset=good_hgrc --config configs.validatedynamicconfig=True --config configs.mismatchwarn=True --config configs.legacylist=foo.bar Config mismatch: foo.bar has 'None' (dynamic) vs 'True' (file) + Config mismatch: foo.bar has 'None' (dynamic) vs 'True' (file) no changes found Hook ran! updating to branch default