# HG changeset patch # User FUJIWARA Katsunori # Date 2015-07-08 08:01:09 # Node ID a4a41525180c9236ff1fc4f7f766f4e30561131d # Parent 72d395e399c162ada601f994c5631ab81b80f8e3 tests: add extension to emulate invoking internalpatch at the specific time This extension fakes "mtime" of patched files to emulate invoking 'patch.internalpatch()' at the specific time. This is useful to reproduce timing critical issues fixed in subsequent patches. diff --git a/tests/fakepatchtime.py b/tests/fakepatchtime.py new file mode 100644 --- /dev/null +++ b/tests/fakepatchtime.py @@ -0,0 +1,26 @@ +# extension to emulate invoking 'patch.internalpatch()' at the time +# specified by '[fakepatchtime] fakenow' + +from mercurial import extensions, patch as patchmod, util + +def internalpatch(orig, ui, repo, patchobj, strip, + prefix='', files=None, + eolmode='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('fakepatchtime', 'fakenow') + if fakenow: + # parsing 'fakenow' in YYYYmmddHHMM format makes comparison between + # 'fakenow' value and 'touch -t YYYYmmddHHMM' argument easy + fakenow = util.parsedate(fakenow, ['%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)