Mercurial > public > mercurial-scm > hg
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) |