--- a/mercurial/localrepo.py Fri Jan 13 19:58:00 2017 -0800
+++ b/mercurial/localrepo.py Fri Jan 13 20:16:56 2017 -0800
@@ -284,6 +284,12 @@
else:
self.supported = self._basesupported
+ # Add compression engines.
+ for name in util.compengines:
+ engine = util.compengines[name]
+ if engine.revlogheader():
+ self.supported.add('exp-compression-%s' % name)
+
if not self.vfs.isdir():
if create:
self.requirements = newreporequirements(self)
@@ -397,6 +403,10 @@
self.svfs.options['aggressivemergedeltas'] = aggressivemergedeltas
self.svfs.options['lazydeltabase'] = not scmutil.gddeltaconfig(self.ui)
+ for r in self.requirements:
+ if r.startswith('exp-compression-'):
+ self.svfs.options['compengine'] = r[len('exp-compression-'):]
+
def _writerequirements(self):
scmutil.writerequires(self.vfs, self.requirements)
@@ -1994,6 +2004,18 @@
if ui.configbool('format', 'dotencode', True):
requirements.add('dotencode')
+ compengine = ui.config('experimental', 'format.compression', 'zlib')
+ if compengine not in util.compengines:
+ raise error.Abort(_('compression engine %s defined by '
+ 'experimental.format.compression not available') %
+ compengine,
+ hint=_('run "hg debuginstall" to list available '
+ 'compression engines'))
+
+ # zlib is the historical default and doesn't need an explicit requirement.
+ if compengine != 'zlib':
+ requirements.add('exp-compression-%s' % compengine)
+
if scmutil.gdinitconfig(ui):
requirements.add('generaldelta')
if ui.configbool('experimental', 'treemanifest', False):