Mercurial > public > mercurial-scm > hg
comparison mercurial/bundlerepo.py @ 5262:a35756389ef4
Make bundlerepo lazier
This allows the localbranch extension to override sopener in time.
author | Brendan Cully <brendan@kublai.com> |
---|---|
date | Mon, 27 Aug 2007 15:48:21 -0700 |
parents | aba624d2301d |
children | 8040f2e4cad0 |
comparison
equal
deleted
inserted
replaced
5261:a4547dfbbf20 | 5262:a35756389ef4 |
---|---|
191 # nothing to do | 191 # nothing to do |
192 pass | 192 pass |
193 else: | 193 else: |
194 raise util.Abort(_("%s: unknown bundle compression type") | 194 raise util.Abort(_("%s: unknown bundle compression type") |
195 % bundlename) | 195 % bundlename) |
196 self.changelog = bundlechangelog(self.sopener, self.bundlefile) | |
197 self.manifest = bundlemanifest(self.sopener, self.bundlefile, | |
198 self.changelog.rev) | |
199 # dict with the mapping 'filename' -> position in the bundle | 196 # dict with the mapping 'filename' -> position in the bundle |
200 self.bundlefilespos = {} | 197 self.bundlefilespos = {} |
201 while 1: | 198 |
202 f = changegroup.getchunk(self.bundlefile) | 199 def __getattr__(self, name): |
203 if not f: | 200 if name == 'changelog': |
204 break | 201 self.changelog = bundlechangelog(self.sopener, self.bundlefile) |
205 self.bundlefilespos[f] = self.bundlefile.tell() | 202 return self.changelog |
206 for c in changegroup.chunkiter(self.bundlefile): | 203 if name == 'manifest': |
207 pass | 204 self.manifest = bundlemanifest(self.sopener, self.bundlefile, |
205 self.changelog.rev) | |
206 self.filestart = self.bundlefile.tell() | |
207 return self.manifest | |
208 return localrepo.localrepository.__getattr__(self, name) | |
208 | 209 |
209 def url(self): | 210 def url(self): |
210 return self._url | 211 return self._url |
211 | 212 |
212 def dev(self): | 213 def dev(self): |
213 return -1 | 214 return -1 |
214 | 215 |
215 def file(self, f): | 216 def file(self, f): |
217 if not self.bundlefilespos: | |
218 self.manifest | |
219 self.bundlefile.seek(self.filestart) | |
220 while 1: | |
221 chunk = changegroup.getchunk(self.bundlefile) | |
222 if not chunk: | |
223 break | |
224 self.bundlefilespos[chunk] = self.bundlefile.tell() | |
225 for c in changegroup.chunkiter(self.bundlefile): | |
226 pass | |
227 | |
216 if f[0] == '/': | 228 if f[0] == '/': |
217 f = f[1:] | 229 f = f[1:] |
218 if f in self.bundlefilespos: | 230 if f in self.bundlefilespos: |
219 self.bundlefile.seek(self.bundlefilespos[f]) | 231 self.bundlefile.seek(self.bundlefilespos[f]) |
220 return bundlefilelog(self.sopener, f, self.bundlefile, | 232 return bundlefilelog(self.sopener, f, self.bundlefile, |