Patchwork D8343: tests: perform grep manually in test-doctest.py

login
register
mail settings
Submitter phabricator
Date March 30, 2020, 1:30 a.m.
Message ID <differential-rev-PHID-DREV-ftuo3ikx7goy224bpkxt-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/45942/
State Superseded
Headers show

Comments

phabricator - March 30, 2020, 1:30 a.m.
indygreg created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  This test has been failing on Windows since 0af56d3ee24c <https://phab.mercurial-scm.org/rHG0af56d3ee24c2b803b8393b5bad4abcd1daa3e78>
  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.

REPOSITORY
  rHG Mercurial

BRANCH
  default

REVISION DETAIL
  https://phab.mercurial-scm.org/D8343

AFFECTED FILES
  tests/test-doctest.py

CHANGE DETAILS




To: indygreg, #hg-reviewers
Cc: mercurial-devel

Patch

diff --git a/tests/test-doctest.py b/tests/test-doctest.py
--- a/tests/test-doctest.py
+++ b/tests/test-doctest.py
@@ -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()