diff -r 2b279126b8f5 -r 4c0a5a256ae8 mercurial/localrepo.py --- 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):