run-tests: split tests/blacklist in tests/blacklists/*
Following discussions with Gilles Morris [1], it seems that it is preferable to
use several blacklist files in a blacklists/ directory. It is easier to add an
unversioned file for experiments than modifying a tracked file.
Also fall back to a simpler syntax, giving up ConfigParser, now that section
names are not needed anymore.
And allow --blacklist parameter to be a complete path, instead of only one
of the filenames contained in tests/blacklists/
[1] http://www.selenic.com/pipermail/mercurial-devel/2009-December/017317.html
[ original upstream message ]
--- a/tests/run-tests.py Mon Jan 25 00:05:27 2010 -0600
+++ b/tests/run-tests.py Thu Dec 10 17:21:31 2009 +0900
@@ -41,7 +41,6 @@
# completes fairly quickly, includes both shell and Python scripts, and
# includes some scripts that run daemon processes.)
-from ConfigParser import ConfigParser
import difflib
import errno
import optparse
@@ -134,8 +133,7 @@
parser.add_option("--inotify", action="store_true",
help="enable inotify extension when running tests")
parser.add_option("--blacklist", action="append",
- help="skip tests listed in the specified section of "
- "the blacklist file")
+ help="skip tests listed in the specified blacklist file")
for option, default in defaults.items():
defaults[option] = int(os.environ.get(*default))
@@ -202,12 +200,22 @@
if sys.version_info[:2] < (2, 6) or sys.version_info[:2] >= (3, 0):
parser.error('--py3k-warnings can only be used on Python 2.6+')
if options.blacklist:
- configparser = ConfigParser()
- configparser.read("blacklist")
blacklist = dict()
- for section in options.blacklist:
- for (item, value) in configparser.items(section):
- blacklist["test-" + item] = section
+ for filename in options.blacklist:
+ try:
+ path = os.path.expanduser(os.path.expandvars(filename))
+ f = open(path, "r")
+ except IOError, err:
+ if err.errno != errno.ENOENT:
+ raise
+ print "warning: no such blacklist file: %s" % filename
+ continue
+
+ for line in f.readlines():
+ line = line.strip()
+ if line and not line.startswith('#'):
+ blacklist[line] = filename
+
options.blacklist = blacklist
return (options, args)
@@ -744,9 +752,9 @@
for test in tests:
if options.blacklist:
- section = options.blacklist.get(test)
- if section is not None:
- skips.append((test, "blacklisted (%s section)" % section))
+ filename = options.blacklist.get(test)
+ if filename is not None:
+ skips.append((test, "blacklisted (%s)" % filename))
skipped += 1
continue