mercurial/bundlerepo.py
changeset 9676 48bf28d3c8dd
parent 9650 1ad02c04356c
child 10263 25e572394f5c
equal deleted inserted replaced
9675:ee913987e4b0 9676:48bf28d3c8dd
    72         """is rev from the bundle"""
    72         """is rev from the bundle"""
    73         if rev < 0:
    73         if rev < 0:
    74             return False
    74             return False
    75         return rev in self.basemap
    75         return rev in self.basemap
    76     def bundlebase(self, rev): return self.basemap[rev]
    76     def bundlebase(self, rev): return self.basemap[rev]
    77     def chunk(self, rev, df=None, cachelen=4096):
    77     def _chunk(self, rev):
    78         # Warning: in case of bundle, the diff is against bundlebase,
    78         # Warning: in case of bundle, the diff is against bundlebase,
    79         # not against rev - 1
    79         # not against rev - 1
    80         # XXX: could use some caching
    80         # XXX: could use some caching
    81         if not self.bundle(rev):
    81         if not self.bundle(rev):
    82             return revlog.revlog.chunk(self, rev, df)
    82             return revlog.revlog._chunk(self, rev)
    83         self.bundlefile.seek(self.start(rev))
    83         self.bundlefile.seek(self.start(rev))
    84         return self.bundlefile.read(self.length(rev))
    84         return self.bundlefile.read(self.length(rev))
    85 
    85 
    86     def revdiff(self, rev1, rev2):
    86     def revdiff(self, rev1, rev2):
    87         """return or calculate a delta between two revisions"""
    87         """return or calculate a delta between two revisions"""
    88         if self.bundle(rev1) and self.bundle(rev2):
    88         if self.bundle(rev1) and self.bundle(rev2):
    89             # hot path for bundle
    89             # hot path for bundle
    90             revb = self.rev(self.bundlebase(rev2))
    90             revb = self.rev(self.bundlebase(rev2))
    91             if revb == rev1:
    91             if revb == rev1:
    92                 return self.chunk(rev2)
    92                 return self._chunk(rev2)
    93         elif not self.bundle(rev1) and not self.bundle(rev2):
    93         elif not self.bundle(rev1) and not self.bundle(rev2):
    94             return revlog.revlog.revdiff(self, rev1, rev2)
    94             return revlog.revlog.revdiff(self, rev1, rev2)
    95 
    95 
    96         return mdiff.textdiff(self.revision(self.node(rev1)),
    96         return mdiff.textdiff(self.revision(self.node(rev1)),
    97                          self.revision(self.node(rev2)))
    97                          self.revision(self.node(rev2)))
   114             rev = self.rev(iter_node)
   114             rev = self.rev(iter_node)
   115         if text is None:
   115         if text is None:
   116             text = revlog.revlog.revision(self, iter_node)
   116             text = revlog.revlog.revision(self, iter_node)
   117 
   117 
   118         while chain:
   118         while chain:
   119             delta = self.chunk(chain.pop())
   119             delta = self._chunk(chain.pop())
   120             text = mdiff.patches(text, [delta])
   120             text = mdiff.patches(text, [delta])
   121 
   121 
   122         p1, p2 = self.parents(node)
   122         p1, p2 = self.parents(node)
   123         if node != revlog.hash(text, p1, p2):
   123         if node != revlog.hash(text, p1, p2):
   124             raise error.RevlogError(_("integrity check failed on %s:%d")
   124             raise error.RevlogError(_("integrity check failed on %s:%d")