[PATCH 5 of 8 V2] tests: add extension to emulate invoking internalpatch at the specific time

FUJIWARA Katsunori foozy at lares.dti.ne.jp
Wed Jul 8 03:08:41 CDT 2015


# HG changeset patch
# User FUJIWARA Katsunori <foozy at lares.dti.ne.jp>
# Date 1436342469 -32400
#      Wed Jul 08 17:01:09 2015 +0900
# Node ID 12f303caa3d5beb009d47cae96285b8b6020aae3
# Parent  012495bec8b68fff0501811f7a3981b6afb919cb
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)


More information about the Mercurial-devel mailing list