Mercurial > public > mercurial-scm > hg-stable
comparison mercurial/bundlerepo.py @ 42831:c070ca6ed86d
bundlerepo: simplify code to take advantage of `_rawtext`
In the revlog code, the code getting the raw text is now isolated. We take
advantage of this to simplify the bundlerepo code.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Fri, 30 Aug 2019 15:04:54 +0200 |
parents | af9c591216ea |
children | 0f5652f17325 |
comparison
equal
deleted
inserted
replaced
42830:10841b9a80c3 | 42831: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): |