comparison mercurial/revlog.py @ 51084:09d60aed5f5d

revlog: avoid opening and closing the file for each cloned revision The previous code was flushing files after each new revision, slowing things down. For exemple, with this change, the evolve repository can run `hg debugupgraderepo --run --optimize re-delta-parent` in about 3.4s instead of 4.5 seconds.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Sat, 14 Oct 2023 03:24:13 +0200
parents 15a50bfaeb79
children 5ffee3cff8de
comparison
equal deleted inserted replaced
51083:15a50bfaeb79 51084:09d60aed5f5d
3459 delta_both_parents = ( 3459 delta_both_parents = (
3460 forcedeltabothparents or old_delta_config.delta_both_parents 3460 forcedeltabothparents or old_delta_config.delta_both_parents
3461 ) 3461 )
3462 destrevlog.delta_config.delta_both_parents = delta_both_parents 3462 destrevlog.delta_config.delta_both_parents = delta_both_parents
3463 3463
3464 with self.reading(): 3464 with self.reading(), destrevlog._writing(tr):
3465 self._clone( 3465 self._clone(
3466 tr, 3466 tr,
3467 destrevlog, 3467 destrevlog,
3468 addrevisioncb, 3468 addrevisioncb,
3469 deltareuse, 3469 deltareuse,
3550 (sidedata, new_flags) = sidedatautil.run_sidedata_helpers( 3550 (sidedata, new_flags) = sidedatautil.run_sidedata_helpers(
3551 self, sidedata_helpers, sidedata, rev 3551 self, sidedata_helpers, sidedata, rev
3552 ) 3552 )
3553 flags = flags | new_flags[0] & ~new_flags[1] 3553 flags = flags | new_flags[0] & ~new_flags[1]
3554 3554
3555 with destrevlog._writing(tr): 3555 destrevlog._addrevision(
3556 destrevlog._addrevision( 3556 node,
3557 node, 3557 rawtext,
3558 rawtext, 3558 tr,
3559 tr, 3559 linkrev,
3560 linkrev, 3560 p1,
3561 p1, 3561 p2,
3562 p2, 3562 flags,
3563 flags, 3563 cachedelta,
3564 cachedelta, 3564 deltacomputer=deltacomputer,
3565 deltacomputer=deltacomputer, 3565 sidedata=sidedata,
3566 sidedata=sidedata, 3566 )
3567 )
3568 3567
3569 if addrevisioncb: 3568 if addrevisioncb:
3570 addrevisioncb(self, rev, node) 3569 addrevisioncb(self, rev, node)
3571 3570
3572 def censorrevision(self, tr, censornode, tombstone=b''): 3571 def censorrevision(self, tr, censornode, tombstone=b''):