mercurial/localrepo.py
changeset 39996 dbcb466d0065
parent 39994 6962ebc8f817
child 40027 83146d176c03
--- 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)