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