tests: add extension to emulate invoking internalpatch at the specific time
authorFUJIWARA Katsunori <foozy@lares.dti.ne.jp>
Wed, 08 Jul 2015 17:01:09 +0900
changeset 25756 a4a41525180c
parent 25755 72d395e399c1
child 25757 4d1382fd96ff
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.
tests/fakepatchtime.py
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tests/fakepatchtime.py	Wed Jul 08 17:01:09 2015 +0900
@@ -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)