Mercurial > public > mercurial-scm > hg
comparison mercurial/bundlerepo.py @ 19629:81241f978fd2
bundlerevlog: extract 'baserevision' method
This makes possible to use bundlerevlog class with subclasses of revlog
that override revlog's 'revision' method. In particular this change is necessary
to implement manifest compression, as it allows extension to replace manifest
class and override 'revision' method there.
author | Wojciech Lopata <lopek@fb.com> |
---|---|
date | Mon, 26 Aug 2013 16:50:31 -0700 |
parents | f0564402d059 |
children | 49f2d5644f04 |
comparison
equal
deleted
inserted
replaced
19628:3193b23eec61 | 19629:81241f978fd2 |
---|---|
118 text = self._cache[2] | 118 text = self._cache[2] |
119 break | 119 break |
120 chain.append(iterrev) | 120 chain.append(iterrev) |
121 iterrev = self.index[iterrev][3] | 121 iterrev = self.index[iterrev][3] |
122 if text is None: | 122 if text is None: |
123 text = revlog.revlog.revision(self, iterrev) | 123 text = self.baserevision(iterrev) |
124 | 124 |
125 while chain: | 125 while chain: |
126 delta = self._chunk(chain.pop()) | 126 delta = self._chunk(chain.pop()) |
127 text = mdiff.patches(text, [delta]) | 127 text = mdiff.patches(text, [delta]) |
128 | 128 |
129 self._checkhash(text, node, rev) | 129 self._checkhash(text, node, rev) |
130 self._cache = (node, rev, text) | 130 self._cache = (node, rev, text) |
131 return text | 131 return text |
132 | |
133 def baserevision(self, nodeorrev): | |
134 # Revlog subclasses may override 'revision' method to modify format of | |
135 # content retrieved from revlog. To use bundlerevlog with such class one | |
136 # needs to override 'baserevision' and make more specific call here. | |
137 return revlog.revlog.revision(self, nodeorrev) | |
132 | 138 |
133 def addrevision(self, text, transaction, link, p1=None, p2=None, d=None): | 139 def addrevision(self, text, transaction, link, p1=None, p2=None, d=None): |
134 raise NotImplementedError | 140 raise NotImplementedError |
135 def addgroup(self, revs, linkmapper, transaction): | 141 def addgroup(self, revs, linkmapper, transaction): |
136 raise NotImplementedError | 142 raise NotImplementedError |
144 changelog.changelog.__init__(self, opener) | 150 changelog.changelog.__init__(self, opener) |
145 linkmapper = lambda x: x | 151 linkmapper = lambda x: x |
146 bundlerevlog.__init__(self, opener, self.indexfile, bundle, | 152 bundlerevlog.__init__(self, opener, self.indexfile, bundle, |
147 linkmapper) | 153 linkmapper) |
148 | 154 |
155 def baserevision(self, nodeorrev): | |
156 # Although changelog doesn't override 'revision' method, some extensions | |
157 # may replace this class with another that does. Same story with | |
158 # manifest and filelog classes. | |
159 return changelog.changelog.revision(self, nodeorrev) | |
160 | |
149 class bundlemanifest(bundlerevlog, manifest.manifest): | 161 class bundlemanifest(bundlerevlog, manifest.manifest): |
150 def __init__(self, opener, bundle, linkmapper): | 162 def __init__(self, opener, bundle, linkmapper): |
151 manifest.manifest.__init__(self, opener) | 163 manifest.manifest.__init__(self, opener) |
152 bundlerevlog.__init__(self, opener, self.indexfile, bundle, | 164 bundlerevlog.__init__(self, opener, self.indexfile, bundle, |
153 linkmapper) | 165 linkmapper) |
166 | |
167 def baserevision(self, nodeorrev): | |
168 return manifest.manifest.revision(self, nodeorrev) | |
154 | 169 |
155 class bundlefilelog(bundlerevlog, filelog.filelog): | 170 class bundlefilelog(bundlerevlog, filelog.filelog): |
156 def __init__(self, opener, path, bundle, linkmapper, repo): | 171 def __init__(self, opener, path, bundle, linkmapper, repo): |
157 filelog.filelog.__init__(self, opener, path) | 172 filelog.filelog.__init__(self, opener, path) |
158 bundlerevlog.__init__(self, opener, self.indexfile, bundle, | 173 bundlerevlog.__init__(self, opener, self.indexfile, bundle, |
159 linkmapper) | 174 linkmapper) |
160 self._repo = repo | 175 self._repo = repo |
176 | |
177 def baserevision(self, nodeorrev): | |
178 return filelog.filelog.revision(self, nodeorrev) | |
161 | 179 |
162 def _file(self, f): | 180 def _file(self, f): |
163 self._repo.file(f) | 181 self._repo.file(f) |
164 | 182 |
165 class bundlepeer(localrepo.localpeer): | 183 class bundlepeer(localrepo.localpeer): |