Show More
@@ -44,8 +44,6 b' from . import (' | |||||
44 |
|
44 | |||
45 | parsers = policy.importmod(r'parsers') |
|
45 | parsers = policy.importmod(r'parsers') | |
46 |
|
46 | |||
47 | _pack = struct.pack |
|
|||
48 | _unpack = struct.unpack |
|
|||
49 | # Aliased for performance. |
|
47 | # Aliased for performance. | |
50 | _zlibdecompress = zlib.decompress |
|
48 | _zlibdecompress = zlib.decompress | |
51 |
|
49 | |||
@@ -171,11 +169,13 b' def hash(text, p1, p2):' | |||||
171 | # 20 bytes: parent 1 nodeid |
|
169 | # 20 bytes: parent 1 nodeid | |
172 | # 20 bytes: parent 2 nodeid |
|
170 | # 20 bytes: parent 2 nodeid | |
173 | # 20 bytes: nodeid |
|
171 | # 20 bytes: nodeid | |
174 | indexformatv0 = ">4l20s20s20s" |
|
172 | indexformatv0 = struct.Struct(">4l20s20s20s") | |
|
173 | indexformatv0_pack = indexformatv0.pack | |||
|
174 | indexformatv0_unpack = indexformatv0.unpack | |||
175 |
|
175 | |||
176 | class revlogoldio(object): |
|
176 | class revlogoldio(object): | |
177 | def __init__(self): |
|
177 | def __init__(self): | |
178 |
self.size = |
|
178 | self.size = indexformatv0.size | |
179 |
|
179 | |||
180 | def parseindex(self, data, inline): |
|
180 | def parseindex(self, data, inline): | |
181 | s = self.size |
|
181 | s = self.size | |
@@ -186,7 +186,7 b' class revlogoldio(object):' | |||||
186 | while off + s <= l: |
|
186 | while off + s <= l: | |
187 | cur = data[off:off + s] |
|
187 | cur = data[off:off + s] | |
188 | off += s |
|
188 | off += s | |
189 |
e = _unpack( |
|
189 | e = indexformatv0_unpack(cur) | |
190 | # transform to revlogv1 format |
|
190 | # transform to revlogv1 format | |
191 | e2 = (offset_type(e[0], 0), e[1], -1, e[2], e[3], |
|
191 | e2 = (offset_type(e[0], 0), e[1], -1, e[2], e[3], | |
192 | nodemap.get(e[4], nullrev), nodemap.get(e[5], nullrev), e[6]) |
|
192 | nodemap.get(e[4], nullrev), nodemap.get(e[5], nullrev), e[6]) | |
@@ -204,7 +204,7 b' class revlogoldio(object):' | |||||
204 | raise RevlogError(_('index entry flags need revlog version 1')) |
|
204 | raise RevlogError(_('index entry flags need revlog version 1')) | |
205 | e2 = (getoffset(entry[0]), entry[1], entry[3], entry[4], |
|
205 | e2 = (getoffset(entry[0]), entry[1], entry[3], entry[4], | |
206 | node(entry[5]), node(entry[6]), entry[7]) |
|
206 | node(entry[5]), node(entry[6]), entry[7]) | |
207 |
return _pack( |
|
207 | return indexformatv0_pack(*e2) | |
208 |
|
208 | |||
209 | # index ng: |
|
209 | # index ng: | |
210 | # 6 bytes: offset |
|
210 | # 6 bytes: offset | |
@@ -216,8 +216,11 b' class revlogoldio(object):' | |||||
216 | # 4 bytes: parent 1 rev |
|
216 | # 4 bytes: parent 1 rev | |
217 | # 4 bytes: parent 2 rev |
|
217 | # 4 bytes: parent 2 rev | |
218 | # 32 bytes: nodeid |
|
218 | # 32 bytes: nodeid | |
219 | indexformatng = ">Qiiiiii20s12x" |
|
219 | indexformatng = struct.Struct(">Qiiiiii20s12x") | |
220 | versionformat = ">I" |
|
220 | indexformatng_pack = indexformatng.pack | |
|
221 | versionformat = struct.Struct(">I") | |||
|
222 | versionformat_pack = versionformat.pack | |||
|
223 | versionformat_unpack = versionformat.unpack | |||
221 |
|
224 | |||
222 | # corresponds to uncompressed length of indexformatng (2 gigs, 4-byte |
|
225 | # corresponds to uncompressed length of indexformatng (2 gigs, 4-byte | |
223 | # signed integer) |
|
226 | # signed integer) | |
@@ -225,7 +228,7 b' versionformat = ">I"' | |||||
225 |
|
228 | |||
226 | class revlogio(object): |
|
229 | class revlogio(object): | |
227 | def __init__(self): |
|
230 | def __init__(self): | |
228 |
self.size = |
|
231 | self.size = indexformatng.size | |
229 |
|
232 | |||
230 | def parseindex(self, data, inline): |
|
233 | def parseindex(self, data, inline): | |
231 | # call the C implementation to parse the index data |
|
234 | # call the C implementation to parse the index data | |
@@ -233,9 +236,9 b' class revlogio(object):' | |||||
233 | return index, getattr(index, 'nodemap', None), cache |
|
236 | return index, getattr(index, 'nodemap', None), cache | |
234 |
|
237 | |||
235 | def packentry(self, entry, node, version, rev): |
|
238 | def packentry(self, entry, node, version, rev): | |
236 |
p = _pack( |
|
239 | p = indexformatng_pack(*entry) | |
237 | if rev == 0: |
|
240 | if rev == 0: | |
238 |
p = _pack( |
|
241 | p = versionformat_pack(version) + p[4:] | |
239 | return p |
|
242 | return p | |
240 |
|
243 | |||
241 | class revlog(object): |
|
244 | class revlog(object): | |
@@ -335,7 +338,7 b' class revlog(object):' | |||||
335 | indexdata = f.read() |
|
338 | indexdata = f.read() | |
336 | f.close() |
|
339 | f.close() | |
337 | if len(indexdata) > 0: |
|
340 | if len(indexdata) > 0: | |
338 |
v = |
|
341 | v = versionformat_unpack(indexdata[:4])[0] | |
339 | self._initempty = False |
|
342 | self._initempty = False | |
340 | except IOError as inst: |
|
343 | except IOError as inst: | |
341 | if inst.errno != errno.ENOENT: |
|
344 | if inst.errno != errno.ENOENT: |
General Comments 0
You need to be logged in to leave comments.
Login now