From patchwork Wed Apr 13 17:21:44 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [1,of,7,v2] import-checker: refactor source reading From: timeless@mozdev.org X-Patchwork-Id: 14590 Message-Id: <20a703ce76f7cda378d2.1460568104@waste.org> To: mercurial-devel@mercurial-scm.org Date: Wed, 13 Apr 2016 12:21:44 -0500 # HG changeset patch # User timeless # Date 1460414044 0 # Mon Apr 11 22:34:04 2016 +0000 # Node ID 20a703ce76f7cda378d2ce950b7daa971b508d74 # Parent 02be5fc18c0c70c087a9d1ab5ffe5afce926f227 import-checker: refactor source reading This will allow .t files to generate multiple sources. It will also allow .py doctests to generate additional sources. diff --git a/contrib/import-checker.py b/contrib/import-checker.py --- a/contrib/import-checker.py +++ b/contrib/import-checker.py @@ -567,6 +567,11 @@ def _cycle_sortkey(c): return len(c), c +def sources(f, modname): + if f.endswith('.py'): + with open(f) as src: + yield src.read(), modname + def main(argv): if len(argv) < 2 or (argv[1] == '-' and len(argv) > 2): print('Usage: %s {-|file [file] [file] ...}') @@ -580,15 +585,14 @@ for source_path in argv[1:]: modname = dotted_name_of_path(source_path, trimpure=True) localmods[modname] = source_path - for modname, source_path in sorted(localmods.items()): - f = open(source_path) - src = f.read() - used_imports[modname] = sorted( - imported_modules(src, modname, localmods, ignore_nested=True)) - for error, lineno in verify_import_convention(modname, src, localmods): - any_errors = True - print('%s:%d: %s' % (source_path, lineno, error)) - f.close() + for localmodname, source_path in sorted(localmods.items()): + for src, modname in sources(source_path, localmodname): + used_imports[modname] = sorted( + imported_modules(src, modname, localmods, ignore_nested=True)) + for error, lineno in verify_import_convention(modname, src, + localmods): + any_errors = True + print('%s:%d: %s' % (source_path, lineno, error)) cycles = find_cycles(used_imports) if cycles: firstmods = set()