diff -r 582676acaf6d -r dbcb466d0065 mercurial/localrepo.py --- 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)