mercurial/bundlerepo.py
changeset 5262 a35756389ef4
parent 5167 aba624d2301d
child 5263 8040f2e4cad0
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,