diff -r 6890b7e991a4 -r ecac0006b90e mercurial/localrepo.py --- a/mercurial/localrepo.py Sun Mar 04 17:11:33 2018 -0500 +++ b/mercurial/localrepo.py Tue Mar 20 17:30:30 2018 -0700 @@ -309,6 +309,15 @@ # clients. REVLOGV2_REQUIREMENT = 'exp-revlogv2.0' +# Functions receiving (ui, features) that extensions can register to impact +# the ability to load repositories with custom requirements. Only +# functions defined in loaded extensions are called. +# +# The function receives a set of requirement strings that the repository +# is capable of opening. Functions will typically add elements to the +# set to reflect that the extension knows how to handle that requirements. +featuresetupfuncs = set() + class localrepository(object): # obsolete experimental requirements: @@ -336,10 +345,6 @@ 'treemanifest', } - # a list of (ui, featureset) functions. - # only functions defined in module of enabled extensions are invoked - featuresetupfuncs = set() - # list of prefix for file which can be written without 'wlock' # Extensions should extend this list when needed _wlockfreeprefix = { @@ -399,11 +404,11 @@ except IOError: pass - if self.featuresetupfuncs: + if featuresetupfuncs: self.supported = set(self._basesupported) # use private copy extmods = set(m.__name__ for n, m in extensions.extensions(self.ui)) - for setupfunc in self.featuresetupfuncs: + for setupfunc in featuresetupfuncs: if setupfunc.__module__ in extmods: setupfunc(self.ui, self.supported) else: