diff -r cbd240188e4e -r d1a7d9c279bb tests/check-perf-code.py --- 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')