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, |