--- a/mercurial/localrepo.py Thu Sep 27 09:23:17 2018 -0700
+++ b/mercurial/localrepo.py Fri Sep 28 09:46:50 2018 -0700
@@ -2808,14 +2808,26 @@
def islocal(path):
return True
-def newreporequirements(ui, createopts=None):
+def defaultcreateopts(ui, createopts=None):
+ """Populate the default creation options for a repository.
+
+ A dictionary of explicitly requested creation options can be passed
+ in. Missing keys will be populated.
+ """
+ createopts = dict(createopts or {})
+
+ if 'backend' not in createopts:
+ # experimental config: storage.new-repo-backend
+ createopts['backend'] = ui.config('storage', 'new-repo-backend')
+
+ return createopts
+
+def newreporequirements(ui, createopts):
"""Determine the set of requirements for a new local repository.
Extensions can wrap this function to specify custom requirements for
new repositories.
"""
- createopts = createopts or {}
-
# If the repo is being created from a shared repository, we copy
# its requirements.
if 'sharedrepo' in createopts:
@@ -2827,6 +2839,14 @@
return requirements
+ if 'backend' not in createopts:
+ raise error.ProgrammingError('backend key not present in createopts; '
+ 'was defaultcreateopts() called?')
+
+ if createopts['backend'] != 'revlogv1':
+ raise error.Abort(_('unable to determine repository requirements for '
+ 'storage backend: %s') % createopts['backend'])
+
requirements = {'revlogv1'}
if ui.configbool('format', 'usestore'):
requirements.add('store')
@@ -2885,6 +2905,7 @@
they know how to handle.
"""
known = {
+ 'backend',
'narrowfiles',
'sharedrepo',
'sharedrelative',
@@ -2901,6 +2922,8 @@
The following keys for ``createopts`` are recognized:
+ backend
+ The storage backend to use.
narrowfiles
Set up repository to support narrow file storage.
sharedrepo
@@ -2912,7 +2935,7 @@
shareditems
Set of items to share to the new repository (in addition to storage).
"""
- createopts = createopts or {}
+ createopts = defaultcreateopts(ui, createopts=createopts)
unknownopts = filterknowncreateopts(ui, createopts)