mercurial/bundlerepo.py
changeset 42821 c070ca6ed86d
parent 42770 af9c591216ea
child 42822 0f5652f17325
equal deleted inserted replaced
42820:10841b9a80c3 42821:c070ca6ed86d
    15 
    15 
    16 import os
    16 import os
    17 import shutil
    17 import shutil
    18 
    18 
    19 from .i18n import _
    19 from .i18n import _
    20 from .node import nullid
    20 from .node import (
       
    21     nullid,
       
    22     nullrev
       
    23 )
    21 
    24 
    22 from . import (
    25 from . import (
    23     bundle2,
    26     bundle2,
    24     changegroup,
    27     changegroup,
    25     changelog,
    28     changelog,
   106             return revlog.revlog.revdiff(self, rev1, rev2)
   109             return revlog.revlog.revdiff(self, rev1, rev2)
   107 
   110 
   108         return mdiff.textdiff(self.rawdata(rev1),
   111         return mdiff.textdiff(self.rawdata(rev1),
   109                               self.rawdata(rev2))
   112                               self.rawdata(rev2))
   110 
   113 
   111     def revision(self, nodeorrev, _df=None, raw=False):
   114     def _rawtext(self, node, rev, _df=None):
   112         """return an uncompressed revision of a given node or revision
   115         if rev is None:
   113         number.
       
   114         """
       
   115         if isinstance(nodeorrev, int):
       
   116             rev = nodeorrev
       
   117             node = self.node(rev)
       
   118         else:
       
   119             node = nodeorrev
       
   120             rev = self.rev(node)
   116             rev = self.rev(node)
   121 
   117         validated = False
   122         if node == nullid:
       
   123             return ""
       
   124 
       
   125         rawtext = None
   118         rawtext = None
   126         chain = []
   119         chain = []
   127         iterrev = rev
   120         iterrev = rev
   128         # reconstruct the revision if it is from a changegroup
   121         # reconstruct the revision if it is from a changegroup
   129         while iterrev > self.repotiprev:
   122         while iterrev > self.repotiprev:
   130             if self._revisioncache and self._revisioncache[1] == iterrev:
   123             if self._revisioncache and self._revisioncache[1] == iterrev:
   131                 rawtext = self._revisioncache[2]
   124                 rawtext = self._revisioncache[2]
   132                 break
   125                 break
   133             chain.append(iterrev)
   126             chain.append(iterrev)
   134             iterrev = self.index[iterrev][3]
   127             iterrev = self.index[iterrev][3]
   135         if rawtext is None:
   128         if iterrev == nullrev:
   136             rawtext = self.baserevision(iterrev)
   129             rawtext = ''
   137 
   130         elif rawtext is None:
       
   131             r = super(bundlerevlog, self)._rawtext(self.node(iterrev),
       
   132                                                    iterrev,
       
   133                                                    _df=_df)
       
   134             __, rawtext, validated = r
       
   135         if chain:
       
   136             validated = False
   138         while chain:
   137         while chain:
   139             delta = self._chunk(chain.pop())
   138             delta = self._chunk(chain.pop())
   140             rawtext = mdiff.patches(rawtext, [delta])
   139             rawtext = mdiff.patches(rawtext, [delta])
   141 
   140         return rev, rawtext, validated
   142         text, validatehash = self._processflags(rawtext, self.flags(rev),
       
   143                                                 'read', raw=raw)
       
   144         if validatehash:
       
   145             self.checkhash(text, node, rev=rev)
       
   146         self._revisioncache = (node, rev, rawtext)
       
   147         return text
       
   148 
   141 
   149     def rawdata(self, nodeorrev, _df=None):
   142     def rawdata(self, nodeorrev, _df=None):
   150         return self.revision(nodeorrev, _df=_df, raw=True)
   143         return self.revision(nodeorrev, _df=_df, raw=True)
   151 
   144 
   152     def baserevision(self, nodeorrev):
   145     def baserevision(self, nodeorrev):