[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