localrepo: invoke only feature setup functions for enabled extensions

Before this patch, each feature setup functions for localrepository
class should examine whether corresponding extension is enabled or not
by themselves.

This patch invokes only feature setup functions defined in module of
enabled extensions, and it makes implementation of feature setup
functions easier and simpler.
This commit is contained in:
FUJIWARA Katsunori 2013-10-17 21:45:17 +09:00
parent a87a5e29b1
commit fb1d8fd59b
2 changed files with 9 additions and 7 deletions

View File

@ -105,7 +105,7 @@ explicitly do so with the --large flag passed to the :hg:`add`
command.
'''
from mercurial import commands, localrepo, extensions
from mercurial import commands, localrepo
import lfcommands
import reposetup
@ -116,11 +116,8 @@ testedwith = 'internal'
reposetup = reposetup.reposetup
def featuresetup(ui, supported):
for name, module in extensions.extensions(ui):
if __name__ == module.__name__:
# don't die on seeing a repo with the largefiles requirement
supported |= set(['largefiles'])
return
# don't die on seeing a repo with the largefiles requirement
supported |= set(['largefiles'])
def uisetup(ui):
localrepo.localrepository.featuresetupfuncs.add(featuresetup)

View File

@ -153,6 +153,8 @@ class localrepository(object):
requirements = ['revlogv1']
filtername = None
# a list of (ui, featureset) functions.
# only functions defined in module of enabled extensions are invoked
featuresetupfuncs = set()
def _baserequirements(self, create):
@ -181,8 +183,11 @@ class localrepository(object):
if self.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:
setupfunc(self.ui, self.supported)
if setupfunc.__module__ in extmods:
setupfunc(self.ui, self.supported)
else:
self.supported = self._basesupported