Mercurial > hg
comparison contrib/perf.py @ 51009:ffb393dd5999
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.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Mon, 25 Sep 2023 11:23:38 +0200 |
parents | 2f1967ffefb1 |
children | 47d43efda8b7 |
comparison
equal
deleted
inserted
replaced
51008:2f1967ffefb1 | 51009:ffb393dd5999 |
---|---|
3757 yield getsvfs(repo)(indexfile) | 3757 yield getsvfs(repo)(indexfile) |
3758 else: | 3758 else: |
3759 datafile = getattr(rl, 'datafile', getattr(rl, 'datafile')) | 3759 datafile = getattr(rl, 'datafile', getattr(rl, 'datafile')) |
3760 yield getsvfs(repo)(datafile) | 3760 yield getsvfs(repo)(datafile) |
3761 | 3761 |
3762 if getattr(rl, 'reading', None) is not None: | |
3763 | |
3764 @contextlib.contextmanager | |
3765 def lazy_reading(rl): | |
3766 with rl.reading(): | |
3767 yield | |
3768 | |
3769 else: | |
3770 | |
3771 @contextlib.contextmanager | |
3772 def lazy_reading(rl): | |
3773 yield | |
3774 | |
3762 def doread(): | 3775 def doread(): |
3763 rl.clearcaches() | 3776 rl.clearcaches() |
3764 for rev in revs: | 3777 for rev in revs: |
3765 segmentforrevs(rev, rev) | 3778 with lazy_reading(rl): |
3779 segmentforrevs(rev, rev) | |
3766 | 3780 |
3767 def doreadcachedfh(): | 3781 def doreadcachedfh(): |
3768 rl.clearcaches() | 3782 rl.clearcaches() |
3769 with reading(rl) as fh: | 3783 with reading(rl) as fh: |
3770 if fh is not None: | 3784 if fh is not None: |
3774 for rev in revs: | 3788 for rev in revs: |
3775 segmentforrevs(rev, rev) | 3789 segmentforrevs(rev, rev) |
3776 | 3790 |
3777 def doreadbatch(): | 3791 def doreadbatch(): |
3778 rl.clearcaches() | 3792 rl.clearcaches() |
3779 segmentforrevs(revs[0], revs[-1]) | 3793 with lazy_reading(rl): |
3794 segmentforrevs(revs[0], revs[-1]) | |
3780 | 3795 |
3781 def doreadbatchcachedfh(): | 3796 def doreadbatchcachedfh(): |
3782 rl.clearcaches() | 3797 rl.clearcaches() |
3783 with reading(rl) as fh: | 3798 with reading(rl) as fh: |
3784 if fh is not None: | 3799 if fh is not None: |
3880 except AttributeError: | 3895 except AttributeError: |
3881 segmentforrevs = r._chunkraw | 3896 segmentforrevs = r._chunkraw |
3882 | 3897 |
3883 node = r.lookup(rev) | 3898 node = r.lookup(rev) |
3884 rev = r.rev(node) | 3899 rev = r.rev(node) |
3900 | |
3901 if getattr(r, 'reading', None) is not None: | |
3902 | |
3903 @contextlib.contextmanager | |
3904 def lazy_reading(r): | |
3905 with r.reading(): | |
3906 yield | |
3907 | |
3908 else: | |
3909 | |
3910 @contextlib.contextmanager | |
3911 def lazy_reading(r): | |
3912 yield | |
3885 | 3913 |
3886 def getrawchunks(data, chain): | 3914 def getrawchunks(data, chain): |
3887 start = r.start | 3915 start = r.start |
3888 length = r.length | 3916 length = r.length |
3889 inline = r._inline | 3917 inline = r._inline |
3914 | 3942 |
3915 def doread(chain): | 3943 def doread(chain): |
3916 if not cache: | 3944 if not cache: |
3917 r.clearcaches() | 3945 r.clearcaches() |
3918 for item in slicedchain: | 3946 for item in slicedchain: |
3919 segmentforrevs(item[0], item[-1]) | 3947 with lazy_reading(r): |
3948 segmentforrevs(item[0], item[-1]) | |
3920 | 3949 |
3921 def doslice(r, chain, size): | 3950 def doslice(r, chain, size): |
3922 for s in slicechunk(r, chain, targetsize=size): | 3951 for s in slicechunk(r, chain, targetsize=size): |
3923 pass | 3952 pass |
3924 | 3953 |