Mercurial > public > mercurial-scm > hg
comparison mercurial/revlog.py @ 47037:d57386e5c80e
revlog: have an explicit "pack_header" method
Having to pass the version header when retrieving the binary version of every
single entry is a bit silly. So we extract that special logic in its own method.
This also prepare the move to newer revlog format, not storing the header within
an actual entry?
Differential Revision: https://phab.mercurial-scm.org/D10510
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Thu, 01 Apr 2021 11:31:54 +0200 |
parents | 5e64c93d5f94 |
children | 724db234b790 |
comparison
equal
deleted
inserted
replaced
47036:5e64c93d5f94 | 47037:d57386e5c80e |
---|---|
264 def __getitem__(self, i): | 264 def __getitem__(self, i): |
265 if i == -1: | 265 if i == -1: |
266 return (0, 0, 0, -1, -1, -1, -1, sha1nodeconstants.nullid) | 266 return (0, 0, 0, -1, -1, -1, -1, sha1nodeconstants.nullid) |
267 return list.__getitem__(self, i) | 267 return list.__getitem__(self, i) |
268 | 268 |
269 def entry_binary(self, rev, header): | 269 def entry_binary(self, rev): |
270 """return the raw binary string representing a revision""" | 270 """return the raw binary string representing a revision""" |
271 entry = self[rev] | 271 entry = self[rev] |
272 if gettype(entry[0]): | 272 if gettype(entry[0]): |
273 raise error.RevlogError( | 273 raise error.RevlogError( |
274 _(b'index entry flags need revlog version 1') | 274 _(b'index entry flags need revlog version 1') |
281 self[entry[5]][7], | 281 self[entry[5]][7], |
282 self[entry[6]][7], | 282 self[entry[6]][7], |
283 entry[7], | 283 entry[7], |
284 ) | 284 ) |
285 return INDEX_ENTRY_V0.pack(*e2) | 285 return INDEX_ENTRY_V0.pack(*e2) |
286 | |
287 def pack_header(self, header): | |
288 """Pack header information in binary""" | |
289 return b'' | |
286 | 290 |
287 | 291 |
288 def parse_index_v0(data, inline): | 292 def parse_index_v0(data, inline): |
289 s = INDEX_ENTRY_V0.size | 293 s = INDEX_ENTRY_V0.size |
290 index = [] | 294 index = [] |
2039 | 2043 |
2040 with self._indexfp(b'w') as fp: | 2044 with self._indexfp(b'w') as fp: |
2041 self.version &= ~FLAG_INLINE_DATA | 2045 self.version &= ~FLAG_INLINE_DATA |
2042 self._inline = False | 2046 self._inline = False |
2043 for i in self: | 2047 for i in self: |
2044 e = self.index.entry_binary(i, self.version) | 2048 e = self.index.entry_binary(i) |
2049 if i == 0: | |
2050 header = self.index.pack_header(self.version) | |
2051 e = header + e | |
2045 fp.write(e) | 2052 fp.write(e) |
2046 | 2053 |
2047 # the temp file replace the real index when we exit the context | 2054 # the temp file replace the real index when we exit the context |
2048 # manager | 2055 # manager |
2049 | 2056 |
2361 | 2368 |
2362 if self.version & 0xFFFF != REVLOGV2: | 2369 if self.version & 0xFFFF != REVLOGV2: |
2363 e = e[:8] | 2370 e = e[:8] |
2364 | 2371 |
2365 self.index.append(e) | 2372 self.index.append(e) |
2366 entry = self.index.entry_binary(curr, self.version) | 2373 entry = self.index.entry_binary(curr) |
2374 if curr == 0: | |
2375 header = self.index.pack_header(self.version) | |
2376 entry = header + entry | |
2367 self._writeentry( | 2377 self._writeentry( |
2368 transaction, | 2378 transaction, |
2369 ifh, | 2379 ifh, |
2370 dfh, | 2380 dfh, |
2371 entry, | 2381 entry, |
3214 with self._indexfp(b'w+') as fp: | 3224 with self._indexfp(b'w+') as fp: |
3215 fp.seek(startrev * self.index.entry_size) | 3225 fp.seek(startrev * self.index.entry_size) |
3216 for i, entry in enumerate(new_entries): | 3226 for i, entry in enumerate(new_entries): |
3217 rev = startrev + i | 3227 rev = startrev + i |
3218 self.index.replace_sidedata_info(rev, entry[8], entry[9]) | 3228 self.index.replace_sidedata_info(rev, entry[8], entry[9]) |
3219 packed = self.index.entry_binary(rev, self.version) | 3229 packed = self.index.entry_binary(rev) |
3230 if rev == 0: | |
3231 header = self.index.pack_header(self.version) | |
3232 packed = header + packed | |
3220 fp.write(packed) | 3233 fp.write(packed) |