tests: perform grep manually in test-doctest.py
authorGregory Szorc <gregory.szorc@gmail.com>
Sun, 29 Mar 2020 15:29:39 -0700
changeset 44656 15aef805619d
parent 44655 47e6ec977555
child 44657 843418dc0b1b
tests: perform grep manually in test-doctest.py This test has been failing on Windows since 0af56d3ee24c introduced the `hg files` invocation. Specifically, Windows seems to be choking on special characters in the fileset pattern. I believe at least \n and > were causing issues. I attempted various incantations to make the Windows command line parser accept the fileset but couldn't get anything working. I declared bankruptcy and just reimplemented the grepping code in Python. After this change, the test now passes on Windows again. Differential Revision: https://phab.mercurial-scm.org/D8343
tests/test-doctest.py
--- a/tests/test-doctest.py	Sun Mar 29 14:31:59 2020 -0700
+++ b/tests/test-doctest.py	Sun Mar 29 15:29:39 2020 -0700
@@ -68,20 +68,26 @@
     'tests.test-url': [{'optionflags': doctest.NORMALIZE_WHITESPACE}],
 }
 
-doctest_indicator = '\n\\s*>>> '
-fileset = 'set:(**.py and grep("%s"))' % doctest_indicator
+fileset = 'set:(**.py)'
+
+cwd = os.path.dirname(os.environ["TESTDIR"])
 
 files = subprocess.check_output(
-    "hg files --print0 '%s'" % fileset,
-    shell=True,
-    cwd=os.path.dirname(os.environ['TESTDIR']),
+    "hg files --print0 \"%s\"" % fileset, shell=True, cwd=cwd,
 ).split(b'\0')
 
+if sys.version_info[0] >= 3:
+    cwd = os.fsencode(cwd)
+
 mods_tested = set()
 for f in files:
     if not f:
         continue
 
+    with open(os.path.join(cwd, f), "rb") as fh:
+        if not re.search(br'\n\s*>>>', fh.read()):
+            continue
+
     if ispy3:
         f = f.decode()