comparison mercurial/localrepo.py @ 14270:d6907a5674a2

revlog: support writing generaldelta revlogs With generaldelta switched on, deltas are always computed against the first parent when adding revisions. This is done regardless of what revision the incoming bundle, if any, is deltaed against. The exact delta building strategy is subject to change, but this will not affect compatibility. Generaldelta is switched off by default.
author Sune Foldager <cryo@cyanite.org>
date Sun, 08 May 2011 21:32:33 +0200
parents df2399663392
children 01472f8f5429
comparison
equal deleted inserted replaced
14269:66257848c154 14270:d6907a5674a2
19 propertycache = util.propertycache 19 propertycache = util.propertycache
20 20
21 class localrepository(repo.repository): 21 class localrepository(repo.repository):
22 capabilities = set(('lookup', 'changegroupsubset', 'branchmap', 'pushkey', 22 capabilities = set(('lookup', 'changegroupsubset', 'branchmap', 'pushkey',
23 'known', 'getbundle')) 23 'known', 'getbundle'))
24 supportedformats = set(('revlogv1',)) 24 supportedformats = set(('revlogv1', 'generaldelta'))
25 supported = supportedformats | set(('store', 'fncache', 'shared', 25 supported = supportedformats | set(('store', 'fncache', 'shared',
26 'dotencode')) 26 'dotencode'))
27 27
28 def __init__(self, baseui, path=None, create=0): 28 def __init__(self, baseui, path=None, create=0):
29 repo.repository.__init__(self) 29 repo.repository.__init__(self)
59 self.opener.append( 59 self.opener.append(
60 "00changelog.i", 60 "00changelog.i",
61 '\0\0\0\2' # represents revlogv2 61 '\0\0\0\2' # represents revlogv2
62 ' dummy changelog to prevent using the old repo layout' 62 ' dummy changelog to prevent using the old repo layout'
63 ) 63 )
64 if self.ui.configbool('format', 'generaldelta', False):
65 requirements.append("generaldelta")
64 else: 66 else:
65 raise error.RepoError(_("repository %s not found") % path) 67 raise error.RepoError(_("repository %s not found") % path)
66 elif create: 68 elif create:
67 raise error.RepoError(_("repository %s already exists") % path) 69 raise error.RepoError(_("repository %s already exists") % path)
68 else: 70 else:
113 self._transref = self._lockref = self._wlockref = None 115 self._transref = self._lockref = self._wlockref = None
114 116
115 def _applyrequirements(self, requirements): 117 def _applyrequirements(self, requirements):
116 self.requirements = requirements 118 self.requirements = requirements
117 self.sopener.options = {} 119 self.sopener.options = {}
120 if 'generaldelta' in requirements:
121 self.sopener.options['generaldelta'] = 1
118 122
119 def _writerequirements(self): 123 def _writerequirements(self):
120 reqfile = self.opener("requires", "w") 124 reqfile = self.opener("requires", "w")
121 for r in self.requirements: 125 for r in self.requirements:
122 reqfile.write("%s\n" % r) 126 reqfile.write("%s\n" % r)