Patchwork [3,of,4,V2] import-checker: remove useless module name supposition in checkmod

login
register
mail settings
Submitter Katsunori FUJIWARA
Date May 15, 2015, 2:13 p.m.
Message ID <0403363ab33ce62c84ab.1431699227@juju>
Download mbox | patch
Permalink /patch/9096/
State Changes Requested
Delegated to: Augie Fackler
Headers show

Comments

Katsunori FUJIWARA - May 15, 2015, 2:13 p.m.
# HG changeset patch
# User FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
# Date 1431699038 -32400
#      Fri May 15 23:10:38 2015 +0900
# Node ID 0403363ab33ce62c84ab1fc004da081357516362
# Parent  ab820b3793cc9a2680cc90f11fd760750c276adb
import-checker: remove useless module name supposition in checkmod

Previous patch ensures that all module names stored in "imports" are
absolute one, and it makes module name supposition in "checkmod" useless.
Augie Fackler - May 15, 2015, 9:36 p.m.
> On May 15, 2015, at 10:13, FUJIWARA Katsunori <foozy@lares.dti.ne.jp> wrote:
> 
> # HG changeset patch
> # User FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
> # Date 1431699038 -32400
> #      Fri May 15 23:10:38 2015 +0900
> # Node ID 0403363ab33ce62c84ab1fc004da081357516362
> # Parent  ab820b3793cc9a2680cc90f11fd760750c276adb
> import-checker: remove useless module name supposition in checkmod
> 
> Previous patch ensures that all module names stored in "imports" are
> absolute one, and it makes module name supposition in "checkmod" useless.

I might reword this as:

import-checker: don't look for modules with a mercurial. prefix if not found

The previous patch ensures all module names are recorded in `imports` as absolute names, so we no longer need to re-try modules as mercurial. if they appear to not be from the stdlib.

> 
> diff --git a/contrib/import-checker.py b/contrib/import-checker.py
> --- a/contrib/import-checker.py
> +++ b/contrib/import-checker.py
> @@ -279,8 +279,6 @@ def checkmod(mod, imports):
>     while visit:
>         path = visit.pop(0)
>         for i in sorted(imports.get(path[-1], [])):
> -            if i not in stdlib_modules and not i.startswith('mercurial.'):
> -                i = mod.rsplit('.', 1)[0] + '.' + i
>             if len(path) < shortest.get(i, 1000):
>                 shortest[i] = len(path)
>                 if i in path:
> @@ -302,10 +300,12 @@ def rotatecycle(cycle):
> def find_cycles(imports):
>     """Find cycles in an already-loaded import graph.
> 
> -    >>> imports = {'top.foo': ['bar', 'os.path', 'qux'],
> -    ...            'top.bar': ['baz', 'sys'],
> -    ...            'top.baz': ['foo'],
> -    ...            'top.qux': ['foo']}
> +    All module names contained in `imports` should be absolute one.
> +
> +    >>> imports = {'top.foo': ['top.bar', 'os.path', 'top.qux'],
> +    ...            'top.bar': ['top.baz', 'sys'],
> +    ...            'top.baz': ['top.foo'],
> +    ...            'top.qux': ['top.foo']}
>>>> print '\\n'.join(sorted(find_cycles(imports)))
>     top.bar -> top.baz -> top.foo -> top.bar
>     top.foo -> top.qux -> top.foo
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel

Patch

diff --git a/contrib/import-checker.py b/contrib/import-checker.py
--- a/contrib/import-checker.py
+++ b/contrib/import-checker.py
@@ -279,8 +279,6 @@  def checkmod(mod, imports):
     while visit:
         path = visit.pop(0)
         for i in sorted(imports.get(path[-1], [])):
-            if i not in stdlib_modules and not i.startswith('mercurial.'):
-                i = mod.rsplit('.', 1)[0] + '.' + i
             if len(path) < shortest.get(i, 1000):
                 shortest[i] = len(path)
                 if i in path:
@@ -302,10 +300,12 @@  def rotatecycle(cycle):
 def find_cycles(imports):
     """Find cycles in an already-loaded import graph.
 
-    >>> imports = {'top.foo': ['bar', 'os.path', 'qux'],
-    ...            'top.bar': ['baz', 'sys'],
-    ...            'top.baz': ['foo'],
-    ...            'top.qux': ['foo']}
+    All module names contained in `imports` should be absolute one.
+
+    >>> imports = {'top.foo': ['top.bar', 'os.path', 'top.qux'],
+    ...            'top.bar': ['top.baz', 'sys'],
+    ...            'top.baz': ['top.foo'],
+    ...            'top.qux': ['top.foo']}
     >>> print '\\n'.join(sorted(find_cycles(imports)))
     top.bar -> top.baz -> top.foo -> top.bar
     top.foo -> top.qux -> top.foo