@@ -237,19 +237,16 @@ class localrepository(object):
'dotencode'))
openerreqs = set(('revlogv1', 'generaldelta', 'treemanifest', 'manifestv2'))
filtername = None
# a list of (ui, featureset) functions.
# only functions defined in module of enabled extensions are invoked
featuresetupfuncs = set()
- def _baserequirements(self, create):
- return ['revlogv1']
-
def __init__(self, baseui, path=None, create=False):
self.requirements = set()
self.wvfs = scmutil.vfs(path, expandpath=True, realpath=True)
self.wopener = self.wvfs
self.root = self.wvfs.base
self.path = self.wvfs.join(".hg")
self.origroot = path
self.auditor = pathutil.pathauditor(self.root, self._checknested)
@@ -277,38 +274,23 @@ class localrepository(object):
for setupfunc in self.featuresetupfuncs:
if setupfunc.__module__ in extmods:
setupfunc(self.ui, self.supported)
else:
self.supported = self._basesupported
if not self.vfs.isdir():
if create:
- requirements = set(self._baserequirements(create))
- if self.ui.configbool('format', 'usestore', True):
- requirements.add("store")
- if self.ui.configbool('format', 'usefncache', True):
- requirements.add("fncache")
- if self.ui.configbool('format', 'dotencode', True):
- requirements.add('dotencode')
-
- if scmutil.gdinitconfig(self.ui):
- requirements.add("generaldelta")
- if self.ui.configbool('experimental', 'treemanifest', False):
- requirements.add("treemanifest")
- if self.ui.configbool('experimental', 'manifestv2', False):
- requirements.add("manifestv2")
-
- self.requirements = requirements
+ self.requirements = newreporequirements(self)
if not self.wvfs.exists():
self.wvfs.makedirs()
self.vfs.makedir(notindexed=True)
- if 'store' in requirements:
+ if 'store' in self.requirements:
self.vfs.mkdir("store")
# create an invalid changelog
self.vfs.append(
"00changelog.i",
'\0\0\0\2' # represents revlogv2
' dummy changelog to prevent using the old repo layout'
)
@@ -1964,8 +1946,32 @@ def undoname(fn):
assert name.startswith('journal')
return os.path.join(base, name.replace('journal', 'undo', 1))
def instance(ui, path, create):
return localrepository(ui, util.urllocalpath(path), create)
def islocal(path):
return True
+
+def newreporequirements(repo):
+ """Determine the set of requirements for a new local repository.
+
+ Extensions can wrap this function to specify custom requirements for
+ new repositories.
+ """
+ ui = repo.ui
+ requirements = set(['revlogv1'])
+ if ui.configbool('format', 'usestore', True):
+ requirements.add('store')
+ if ui.configbool('format', 'usefncache', True):
+ requirements.add('fncache')
+ if ui.configbool('format', 'dotencode', True):
+ requirements.add('dotencode')
+
+ if scmutil.gdinitconfig(ui):
+ requirements.add('generaldelta')
+ if ui.configbool('experimental', 'treemanifest', False):
+ requirements.add('treemanifest')
+ if ui.configbool('experimental', 'manifestv2', False):
+ requirements.add('manifestv2')
+
+ return requirements