Patchwork [1,of,2] run-tests: don't warn on unnecessary globs mandated by check-code.py

login
register
mail settings
Submitter Matt Harbison
Date Nov. 19, 2014, 5:05 a.m.
Message ID <c7f4ddbf7c2b8ab3eac3.1416373503@Envy>
Download mbox | patch
Permalink /patch/6786/
State Accepted
Commit 5bd04faaa3ee7f3bd8c413d3c9896462c5915cd5
Headers show

Comments

Matt Harbison - Nov. 19, 2014, 5:05 a.m.
# HG changeset patch
# User Matt Harbison <matt_harbison@yahoo.com>
# Date 1416366120 18000
#      Tue Nov 18 22:02:00 2014 -0500
# Node ID c7f4ddbf7c2b8ab3eac36ed65808c5c4e7d5c5a3
# Parent  e63941631a3f61b3323dbcc2545689b1eb34e308
run-tests: don't warn on unnecessary globs mandated by check-code.py

When test output is processed, if os.altsep is defined (i.e. on Windows),
TTest.globmatch() will cause a warning later on if a line has a glob that isn't
necessary.  Unfortunately, the regex checking in check-code.py doesn't have this
context.  Therefore we ended up with cases where the test would get flagged with
a warning only on Windows because a glob was present, because check-code.py
would warn if it wasn't.  For example, from test-subrepo.t:

    $ hg -R issue1852a push `pwd`/issue1852c
    pushing to $TESTTMP/issue1852c (glob)

The glob isn't necessary here because the slash is shown as it was provided.
However, check-code mandates one to handle the case where the default path has
backslashes in it.

Break the cycle by checking against a subset of the check-code rules before
flagging the test with a warning, and ignore the superfluous glob if it matches
a rule.  This change fixes warnings in test-largefiles-update.t, test-subrepo.t,
test-tag.t, and test-rename-dir-merge.t on Windows.

I really hate that the rules are copy/pasted here (minus the leading two spaces)
because it would be nice to only update the rules once, in a single place.  But
I'm not sure how else to do it.  I'm open to suggestions.  Splitting some of the
rules out of check-code.py seems wrong, but so does moving check-code.py out of
contrib, given that other checking scripts live there.

There are other glob patterns that could be copied over, but this is enough to
make the current tests run on Windows.

Patch

diff --git a/tests/run-tests.py b/tests/run-tests.py
--- a/tests/run-tests.py
+++ b/tests/run-tests.py
@@ -721,6 +721,15 @@ 
 
         return result
 
+# This script may want to drop globs from lines matching these patterns on
+# Windows, but check-code.py wants a glob on these lines unconditionally.  Don't
+# warn if that is the case for anything matching these lines.
+checkcodeglobpats = [
+    re.compile(r'^pushing to \$TESTTMP/.*[^)]$'),
+    re.compile(r'^moving \S+/.*[^)]$'),
+    re.compile(r'^pulling from \$TESTTMP/.*[^)]$')
+]
+
 class TTest(Test):
     """A "t test" is a test backed by a .t file."""
 
@@ -977,6 +986,9 @@ 
         if el + '\n' == l:
             if os.altsep:
                 # matching on "/" is not needed for this line
+                for pat in checkcodeglobpats:
+                    if pat.match(el):
+                        return True
                 return '-glob'
             return True
         i, n = 0, len(el)