--- a/tests/check-perf-code.py Fri May 20 09:47:35 2016 +0900
+++ b/tests/check-perf-code.py Fri May 20 09:47:35 2016 +0900
@@ -16,7 +16,50 @@
]
]
+def modulewhitelist(names):
+ replacement = [('.py', ''), ('.c', ''), # trim suffix
+ ('mercurial%s' % (os.sep), ''), # trim "mercurial/" path
+ ]
+ ignored = set(['__init__'])
+ modules = {}
+
+ # convert from file name to module name, and count # of appearances
+ for name in names:
+ name = name.strip()
+ for old, new in replacement:
+ name = name.replace(old, new)
+ if name not in ignored:
+ modules[name] = modules.get(name, 0) + 1
+
+ # list up module names, which appear multiple times
+ whitelist = []
+ for name, count in modules.items():
+ if count > 1:
+ whitelist.append(name)
+
+ return whitelist
+
if __name__ == "__main__":
+ # in this case, it is assumed that result of "hg files" at
+ # multiple revisions is given via stdin
+ whitelist = modulewhitelist(sys.stdin)
+ assert whitelist, "module whitelist is empty"
+
+ # build up module whitelist check from file names given at runtime
+ perfpypats[0].append(
+ # this matching pattern assumes importing modules from
+ # "mercurial" package in the current style below, for simplicity
+ #
+ # from mercurial import (
+ # foo,
+ # bar,
+ # baz
+ # )
+ ((r'from mercurial import [(][a-z0-9, \n#]*\n(?! *%s,|^[ #]*\n|[)])'
+ % ',| *'.join(whitelist)),
+ "import newer module separately in try clause for early Mercurial"
+ ))
+
# import contrib/check-code.py as checkcode
assert 'RUNTESTDIR' in os.environ, "use check-perf-code.py in *.t script"
contribpath = os.path.join(os.environ['RUNTESTDIR'], '..', 'contrib')