Mercurial > public > mercurial-scm > hg
comparison mercurial/changelog.py @ 47425:e0a314bcbc9d
revlog: Extract low-level random-access file read caching logic
The `revlog` class does many things, among which fulfilling requests for
arbitrary byte slices from the revlog "data file" by reading a larger chunk
and caching it in memory, in order to reduce the number of system calls.
This extracts that logic into a new class, so that it may later also be used
for the side-data file (with another instance of that class).
The copyright notice of the new file does not include a date or author name
since such information tend not to be kept up-to-date:
https://www.linuxfoundation.org/en/blog/copyright-notices-in-open-source-software-projects/
Differential Revision: https://phab.mercurial-scm.org/D10878
author | Simon Sapin <simon.sapin@octobus.net> |
---|---|
date | Tue, 08 Jun 2021 19:55:00 +0200 |
parents | 9d9eb22b9b69 |
children | cac0e0621ceb |
comparison
equal
deleted
inserted
replaced
47424:f77404040776 | 47425:e0a314bcbc9d |
---|---|
452 else: | 452 else: |
453 self._delaybuf = [] | 453 self._delaybuf = [] |
454 self.opener = _delayopener( | 454 self.opener = _delayopener( |
455 self._realopener, self._indexfile, self._delaybuf | 455 self._realopener, self._indexfile, self._delaybuf |
456 ) | 456 ) |
457 self._segmentfile.opener = self.opener | |
457 self._delayed = True | 458 self._delayed = True |
458 tr.addpending(b'cl-%i' % id(self), self._writepending) | 459 tr.addpending(b'cl-%i' % id(self), self._writepending) |
459 tr.addfinalize(b'cl-%i' % id(self), self._finalize) | 460 tr.addfinalize(b'cl-%i' % id(self), self._finalize) |
460 | 461 |
461 def _finalize(self, tr): | 462 def _finalize(self, tr): |
462 """finalize index updates""" | 463 """finalize index updates""" |
463 self._delayed = False | 464 self._delayed = False |
464 self.opener = self._realopener | 465 self.opener = self._realopener |
466 self._segmentfile.opener = self.opener | |
465 # move redirected index data back into place | 467 # move redirected index data back into place |
466 if self._docket is not None: | 468 if self._docket is not None: |
467 self._write_docket(tr) | 469 self._write_docket(tr) |
468 elif self._divert: | 470 elif self._divert: |
469 assert not self._delaybuf | 471 assert not self._delaybuf |
499 fp2.close() | 501 fp2.close() |
500 # switch modes so finalize can simply rename | 502 # switch modes so finalize can simply rename |
501 self._delaybuf = None | 503 self._delaybuf = None |
502 self._divert = True | 504 self._divert = True |
503 self.opener = _divertopener(self._realopener, self._indexfile) | 505 self.opener = _divertopener(self._realopener, self._indexfile) |
506 self._segmentfile.opener = self.opener | |
504 | 507 |
505 if self._divert: | 508 if self._divert: |
506 return True | 509 return True |
507 | 510 |
508 return False | 511 return False |