equal
deleted
inserted
replaced
39 from .i18n import _ |
39 from .i18n import _ |
40 from .pycompat import getattr |
40 from .pycompat import getattr |
41 from .revlogutils.constants import ( |
41 from .revlogutils.constants import ( |
42 FLAG_GENERALDELTA, |
42 FLAG_GENERALDELTA, |
43 FLAG_INLINE_DATA, |
43 FLAG_INLINE_DATA, |
|
44 INDEX_ENTRY_V0, |
44 REVLOGV0, |
45 REVLOGV0, |
45 REVLOGV1, |
46 REVLOGV1, |
46 REVLOGV1_FLAGS, |
47 REVLOGV1_FLAGS, |
47 REVLOGV2, |
48 REVLOGV2, |
48 REVLOGV2_FLAGS, |
49 REVLOGV2_FLAGS, |
216 warning = attr.ib(default=None) |
217 warning = attr.ib(default=None) |
217 error = attr.ib(default=None) |
218 error = attr.ib(default=None) |
218 node = attr.ib(default=None) |
219 node = attr.ib(default=None) |
219 |
220 |
220 |
221 |
221 # index v0: |
|
222 # 4 bytes: offset |
|
223 # 4 bytes: compressed length |
|
224 # 4 bytes: base rev |
|
225 # 4 bytes: link rev |
|
226 # 20 bytes: parent 1 nodeid |
|
227 # 20 bytes: parent 2 nodeid |
|
228 # 20 bytes: nodeid |
|
229 indexformatv0 = struct.Struct(b">4l20s20s20s") |
|
230 indexformatv0_pack = indexformatv0.pack |
|
231 indexformatv0_unpack = indexformatv0.unpack |
|
232 |
|
233 |
|
234 class revlogoldindex(list): |
222 class revlogoldindex(list): |
235 @property |
223 @property |
236 def nodemap(self): |
224 def nodemap(self): |
237 msg = b"index.nodemap is deprecated, use index.[has_node|rev|get_rev]" |
225 msg = b"index.nodemap is deprecated, use index.[has_node|rev|get_rev]" |
238 util.nouideprecwarn(msg, b'5.3', stacklevel=2) |
226 util.nouideprecwarn(msg, b'5.3', stacklevel=2) |
282 return list.__getitem__(self, i) |
270 return list.__getitem__(self, i) |
283 |
271 |
284 |
272 |
285 class revlogoldio(object): |
273 class revlogoldio(object): |
286 def __init__(self): |
274 def __init__(self): |
287 self.size = indexformatv0.size |
275 self.size = INDEX_ENTRY_V0.size |
288 |
276 |
289 def parseindex(self, data, inline): |
277 def parseindex(self, data, inline): |
290 s = self.size |
278 s = self.size |
291 index = [] |
279 index = [] |
292 nodemap = nodemaputil.NodeMap({nullid: nullrev}) |
280 nodemap = nodemaputil.NodeMap({nullid: nullrev}) |
293 n = off = 0 |
281 n = off = 0 |
294 l = len(data) |
282 l = len(data) |
295 while off + s <= l: |
283 while off + s <= l: |
296 cur = data[off : off + s] |
284 cur = data[off : off + s] |
297 off += s |
285 off += s |
298 e = indexformatv0_unpack(cur) |
286 e = INDEX_ENTRY_V0.unpack(cur) |
299 # transform to revlogv1 format |
287 # transform to revlogv1 format |
300 e2 = ( |
288 e2 = ( |
301 offset_type(e[0], 0), |
289 offset_type(e[0], 0), |
302 e[1], |
290 e[1], |
303 -1, |
291 -1, |
313 |
301 |
314 index = revlogoldindex(index) |
302 index = revlogoldindex(index) |
315 return index, None |
303 return index, None |
316 |
304 |
317 def packentry(self, entry, node, version, rev): |
305 def packentry(self, entry, node, version, rev): |
|
306 """return the binary representation of an entry |
|
307 |
|
308 entry: a tuple containing all the values (see index.__getitem__) |
|
309 node: a callback to convert a revision to nodeid |
|
310 version: the changelog version |
|
311 rev: the revision number |
|
312 """ |
318 if gettype(entry[0]): |
313 if gettype(entry[0]): |
319 raise error.RevlogError( |
314 raise error.RevlogError( |
320 _(b'index entry flags need revlog version 1') |
315 _(b'index entry flags need revlog version 1') |
321 ) |
316 ) |
322 e2 = ( |
317 e2 = ( |
326 entry[4], |
321 entry[4], |
327 node(entry[5]), |
322 node(entry[5]), |
328 node(entry[6]), |
323 node(entry[6]), |
329 entry[7], |
324 entry[7], |
330 ) |
325 ) |
331 return indexformatv0_pack(*e2) |
326 return INDEX_ENTRY_V0.pack(*e2) |
332 |
327 |
333 |
328 |
334 # index ng: |
329 # index ng: |
335 # 6 bytes: offset |
330 # 6 bytes: offset |
336 # 2 bytes: flags |
331 # 2 bytes: flags |