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): |