# HG changeset patch # User Pierre-Yves David # Date 2023-09-25 09:23:38 # Node ID ffb393dd5999123551141b48fe43c2aed33fb630 # Parent 2f1967ffefb176908138e464785604193a737e3f perf: ensure all readlog's reading is done within a `reading` context We are about to enforce this at the revlog level, so we update the perf code in advance. diff --git a/contrib/perf.py b/contrib/perf.py --- a/contrib/perf.py +++ b/contrib/perf.py @@ -3759,10 +3759,24 @@ def perfrevlogchunks(ui, repo, file_=Non datafile = getattr(rl, 'datafile', getattr(rl, 'datafile')) yield getsvfs(repo)(datafile) + if getattr(rl, 'reading', None) is not None: + + @contextlib.contextmanager + def lazy_reading(rl): + with rl.reading(): + yield + + else: + + @contextlib.contextmanager + def lazy_reading(rl): + yield + def doread(): rl.clearcaches() for rev in revs: - segmentforrevs(rev, rev) + with lazy_reading(rl): + segmentforrevs(rev, rev) def doreadcachedfh(): rl.clearcaches() @@ -3776,7 +3790,8 @@ def perfrevlogchunks(ui, repo, file_=Non def doreadbatch(): rl.clearcaches() - segmentforrevs(revs[0], revs[-1]) + with lazy_reading(rl): + segmentforrevs(revs[0], revs[-1]) def doreadbatchcachedfh(): rl.clearcaches() @@ -3883,6 +3898,19 @@ def perfrevlogrevision(ui, repo, file_, node = r.lookup(rev) rev = r.rev(node) + if getattr(r, 'reading', None) is not None: + + @contextlib.contextmanager + def lazy_reading(r): + with r.reading(): + yield + + else: + + @contextlib.contextmanager + def lazy_reading(r): + yield + def getrawchunks(data, chain): start = r.start length = r.length @@ -3916,7 +3944,8 @@ def perfrevlogrevision(ui, repo, file_, if not cache: r.clearcaches() for item in slicedchain: - segmentforrevs(item[0], item[-1]) + with lazy_reading(r): + segmentforrevs(item[0], item[-1]) def doslice(r, chain, size): for s in slicechunk(r, chain, targetsize=size):