##// END OF EJS Templates
tests: fix builtin module test on pypy...
tests: fix builtin module test on pypy On pypy datetime and cProfile are modules written in Python, not in C. For the purpose of this test, just list them explicitely as builtins, which silences warnings about them being imported before stdlib modules.

File last commit:

r27283:b38adef6 default
r28713:806d260c default
Show More
fakedirstatewritetime.py
68 lines | 2.3 KiB | text/x-python | PythonLexer
/ tests / fakedirstatewritetime.py
FUJIWARA Katsunori
tests: add extension to emulate invoking dirstate.write at the specific time...
r25752 # extension to emulate invoking 'dirstate.write()' at the time
# specified by '[fakedirstatewritetime] fakenow', only when
# 'dirstate.write()' is invoked via functions below:
#
# - 'workingctx._checklookup()' (= 'repo.status()')
# - 'committablectx.markcommitted()'
Gregory Szorc
tests/fakedirstatewritetime.py: use absolute_import
r27283 from __future__ import absolute_import
from mercurial import (
context,
dirstate,
extensions,
parsers,
util,
)
FUJIWARA Katsunori
tests: add extension to emulate invoking dirstate.write at the specific time...
r25752
def pack_dirstate(fakenow, orig, dmap, copymap, pl, now):
# execute what original parsers.pack_dirstate should do actually
# for consistency
actualnow = int(now)
for f, e in dmap.iteritems():
if e[0] == 'n' and e[3] == actualnow:
e = parsers.dirstatetuple(e[0], e[1], e[2], -1)
dmap[f] = e
return orig(dmap, copymap, pl, fakenow)
def fakewrite(ui, func):
# fake "now" of 'pack_dirstate' only if it is invoked while 'func'
fakenow = ui.config('fakedirstatewritetime', 'fakenow')
if not fakenow:
# Execute original one, if fakenow isn't configured. This is
# useful to prevent subrepos from executing replaced one,
# because replacing 'parsers.pack_dirstate' is also effective
# in subrepos.
return func()
# parsing 'fakenow' in YYYYmmddHHMM format makes comparison between
# 'fakenow' value and 'touch -t YYYYmmddHHMM' argument easy
FUJIWARA Katsunori
parsers: make pack_dirstate take now in integer for consistency...
r26630 fakenow = util.parsedate(fakenow, ['%Y%m%d%H%M'])[0]
FUJIWARA Katsunori
tests: add extension to emulate invoking dirstate.write at the specific time...
r25752
orig_pack_dirstate = parsers.pack_dirstate
FUJIWARA Katsunori
dirstate: make writing in-memory changes aware of transaction activity...
r26634 orig_dirstate_getfsnow = dirstate._getfsnow
FUJIWARA Katsunori
tests: add extension to emulate invoking dirstate.write at the specific time...
r25752 wrapper = lambda *args: pack_dirstate(fakenow, orig_pack_dirstate, *args)
parsers.pack_dirstate = wrapper
FUJIWARA Katsunori
dirstate: make writing in-memory changes aware of transaction activity...
r26634 dirstate._getfsnow = lambda *args: fakenow
FUJIWARA Katsunori
tests: add extension to emulate invoking dirstate.write at the specific time...
r25752 try:
return func()
finally:
parsers.pack_dirstate = orig_pack_dirstate
FUJIWARA Katsunori
dirstate: make writing in-memory changes aware of transaction activity...
r26634 dirstate._getfsnow = orig_dirstate_getfsnow
FUJIWARA Katsunori
tests: add extension to emulate invoking dirstate.write at the specific time...
r25752
def _checklookup(orig, workingctx, files):
ui = workingctx.repo().ui
return fakewrite(ui, lambda : orig(workingctx, files))
def markcommitted(orig, committablectx, node):
ui = committablectx.repo().ui
return fakewrite(ui, lambda : orig(committablectx, node))
def extsetup(ui):
extensions.wrapfunction(context.workingctx, '_checklookup',
_checklookup)
extensions.wrapfunction(context.committablectx, 'markcommitted',
markcommitted)