comparison mercurial/changelog.py @ 47214:906a7bcaac86

revlog: introduce a mandatory `_writing` context to update revlog content Before this change, various revlog methods where managing the opening and closing of the revlog files manually and passing the file descriptor alors the call path. To simplify the tracking of the write operation by a future docket, we need something more organised. As a result, we introduce a `revlog._writing` context manager that will wrap each revlog update operation. The file descriptor are kept in the existing `revlog._writinghandles` parameter that was already used by the `addgroup` logic. All this change is internal to the revlog only, the "public" interface is not affected. The `addrevision` and `addgroup` logic are still responsible for setup up this context. However this new context give us multiple benefits: * all writer use a same, unified, logic, * this context is programmatically enforced, * each write "session" as a clearly identified start and end. The post-pull sidedata update logic is still doing writing by end and will be adjusted in a later changesets. This change affect the concurrency checker test, because register the state of the file in the transaction sooner in `addrevision` (about as early as what `addgroup` would do), so the abort is rollbacking the other commit. I don't want to weaken the current main logic. Differential Revision: https://phab.mercurial-scm.org/D10605
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Mon, 03 May 2021 12:27:42 +0200
parents 8d3c2f9d4af7
children 616b8f412676
comparison
equal deleted inserted replaced
47213:100f061d88f6 47214:906a7bcaac86
504 if self._divert: 504 if self._divert:
505 return True 505 return True
506 506
507 return False 507 return False
508 508
509 def _enforceinlinesize(self, tr, fp=None): 509 def _enforceinlinesize(self, tr):
510 if not self._delayed: 510 if not self._delayed:
511 revlog.revlog._enforceinlinesize(self, tr, fp) 511 revlog.revlog._enforceinlinesize(self, tr)
512 512
513 def read(self, nodeorrev): 513 def read(self, nodeorrev):
514 """Obtain data from a parsed changelog revision. 514 """Obtain data from a parsed changelog revision.
515 515
516 Returns a 6-tuple of: 516 Returns a 6-tuple of: