mercurial/bundlerepo.py
changeset 14144 3c3c53d8343a
parent 14142 cb91ea6af733
child 14158 d8ba6fb2ce15
equal deleted inserted replaced
14143:da635d3c5620 14144:3c3c53d8343a
    32         self.bundle = bundle
    32         self.bundle = bundle
    33         self.basemap = {}
    33         self.basemap = {}
    34         n = len(self)
    34         n = len(self)
    35         chain = None
    35         chain = None
    36         while 1:
    36         while 1:
    37             chunkdata = bundle.parsechunk(chain)
    37             chunkdata = bundle.deltachunk(chain)
    38             if not chunkdata:
    38             if not chunkdata:
    39                 break
    39                 break
    40             node = chunkdata['node']
    40             node = chunkdata['node']
    41             p1 = chunkdata['p1']
    41             p1 = chunkdata['p1']
    42             p2 = chunkdata['p2']
    42             p2 = chunkdata['p2']
   195         # dict with the mapping 'filename' -> position in the bundle
   195         # dict with the mapping 'filename' -> position in the bundle
   196         self.bundlefilespos = {}
   196         self.bundlefilespos = {}
   197 
   197 
   198     @util.propertycache
   198     @util.propertycache
   199     def changelog(self):
   199     def changelog(self):
       
   200         # consume the header if it exists
       
   201         self.bundle.changelogheader()
   200         c = bundlechangelog(self.sopener, self.bundle)
   202         c = bundlechangelog(self.sopener, self.bundle)
   201         self.manstart = self.bundle.tell()
   203         self.manstart = self.bundle.tell()
   202         return c
   204         return c
   203 
   205 
   204     @util.propertycache
   206     @util.propertycache
   205     def manifest(self):
   207     def manifest(self):
   206         self.bundle.seek(self.manstart)
   208         self.bundle.seek(self.manstart)
       
   209         # consume the header if it exists
       
   210         self.bundle.manifestheader()
   207         m = bundlemanifest(self.sopener, self.bundle, self.changelog.rev)
   211         m = bundlemanifest(self.sopener, self.bundle, self.changelog.rev)
   208         self.filestart = self.bundle.tell()
   212         self.filestart = self.bundle.tell()
   209         return m
   213         return m
   210 
   214 
   211     @util.propertycache
   215     @util.propertycache
   223 
   227 
   224     def file(self, f):
   228     def file(self, f):
   225         if not self.bundlefilespos:
   229         if not self.bundlefilespos:
   226             self.bundle.seek(self.filestart)
   230             self.bundle.seek(self.filestart)
   227             while 1:
   231             while 1:
   228                 chunk = self.bundle.chunk()
   232                 chunkdata = self.bundle.filelogheader()
   229                 if not chunk:
   233                 if not chunkdata:
   230                     break
   234                     break
   231                 self.bundlefilespos[chunk] = self.bundle.tell()
   235                 fname = chunkdata['filename']
       
   236                 self.bundlefilespos[fname] = self.bundle.tell()
   232                 while 1:
   237                 while 1:
   233                     c = self.bundle.chunk()
   238                     c = self.bundle.deltachunk(None)
   234                     if not c:
   239                     if not c:
   235                         break
   240                         break
   236 
   241 
   237         if f[0] == '/':
   242         if f[0] == '/':
   238             f = f[1:]
   243             f = f[1:]