view tests/fakepatchtime.py @ 50938:f02b62b7b056 stable

perf: introduce more cache invalidation option in perf::tags This will help us to assert the performance of different versions in more diverse situations. We introduce helper function in the tags module in case invalidating such cache becomes different in the future.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Thu, 22 Jun 2023 16:03:18 +0200
parents 6000f5b25c9b
children
line wrap: on
line source

# extension to emulate invoking 'patch.internalpatch()' at the time
# specified by '[fakepatchtime] fakenow'


from mercurial import (
    extensions,
    patch as patchmod,
    registrar,
)
from mercurial.utils import dateutil

configtable = {}
configitem = registrar.configitem(configtable)

configitem(
    b'fakepatchtime',
    b'fakenow',
    default=None,
)


def internalpatch(
    orig,
    ui,
    repo,
    patchobj,
    strip,
    prefix=b'',
    files=None,
    eolmode=b'strict',
    similarity=0,
):
    if files is None:
        files = set()
    r = orig(
        ui,
        repo,
        patchobj,
        strip,
        prefix=prefix,
        files=files,
        eolmode=eolmode,
        similarity=similarity,
    )

    fakenow = ui.config(b'fakepatchtime', b'fakenow')
    if fakenow:
        # parsing 'fakenow' in YYYYmmddHHMM format makes comparison between
        # 'fakenow' value and 'touch -t YYYYmmddHHMM' argument easy
        fakenow = dateutil.parsedate(fakenow, [b'%Y%m%d%H%M'])[0]
        for f in files:
            repo.wvfs.utime(f, (fakenow, fakenow))

    return r


def extsetup(ui):
    extensions.wrapfunction(patchmod, 'internalpatch', internalpatch)