mercurial/bundlerepo.py
changeset 19629 81241f978fd2
parent 18825 f0564402d059
child 20790 49f2d5644f04
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):