[PATCH 1 of 6] import-checker: refactor source reading

timeless timeless at mozdev.org
Tue Apr 12 21:53:59 UTC 2016


# HG changeset patch
# User timeless <timeless at mozdev.org>
# Date 1460414044 0
#      Mon Apr 11 22:34:04 2016 +0000
# Node ID df592defa539bf8a1f338a81bfbbb73f6e7d9935
# Parent  16255662446d2ce08bd0a4210df30afe3d6377f6
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] ...}')
@@ -581,14 +586,13 @@
         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 src, modname2 in sources(source_path, modname):
+            used_imports[modname2] = sorted(
+                imported_modules(src, modname2, localmods, ignore_nested=True))
+            for error, lineno in verify_import_convention(modname2, src,
+                                                          localmods):
+                any_errors = True
+                print('%s:%d: %s' % (source_path, lineno, error))
     cycles = find_cycles(used_imports)
     if cycles:
         firstmods = set()


More information about the Mercurial-devel mailing list