comparison contrib/import-checker.py @ 33890:3de9a2df6411

contrib: have import-checker work mostly with native strings for mod names Module names are a bit awkward to deal with portably otherwise.
author Augie Fackler <raf@durin42.com>
date Tue, 22 Aug 2017 12:59:21 -0400
parents bcf53149ebce
children c9cf69d0c3b9
comparison
equal deleted inserted replaced
33889:f672d060a931 33890:3de9a2df6411
145 >>> fromlocal2('bar2', 1) 145 >>> fromlocal2('bar2', 1)
146 False 146 False
147 >>> fromlocal2('bar', 2) 147 >>> fromlocal2('bar', 2)
148 ('foo.bar', 'foo.bar.__init__', True) 148 ('foo.bar', 'foo.bar.__init__', True)
149 """ 149 """
150 if not isinstance(modulename, str):
151 modulename = modulename.decode('ascii')
150 prefix = '.'.join(modulename.split('.')[:-1]) 152 prefix = '.'.join(modulename.split('.')[:-1])
151 if prefix: 153 if prefix:
152 prefix += '.' 154 prefix += '.'
153 def fromlocal(name, level=0): 155 def fromlocal(name, level=0):
154 # name is false value when relative imports are used. 156 # name is false value when relative imports are used.
404 applies to import statements outside of any blocks. 406 applies to import statements outside of any blocks.
405 * Relative imports from the standard library are not allowed. 407 * Relative imports from the standard library are not allowed.
406 * Certain modules must be aliased to alternate names to avoid aliasing 408 * Certain modules must be aliased to alternate names to avoid aliasing
407 and readability problems. See `requirealias`. 409 and readability problems. See `requirealias`.
408 """ 410 """
411 if not isinstance(module, str):
412 module = module.decode('ascii')
409 topmodule = module.split('.')[0] 413 topmodule = module.split('.')[0]
410 fromlocal = fromlocalfunc(module, localmods) 414 fromlocal = fromlocalfunc(module, localmods)
411 415
412 # Whether a local/non-stdlib import has been performed. 416 # Whether a local/non-stdlib import has been performed.
413 seenlocal = None 417 seenlocal = None
722 for source_path in argv[1:]: 726 for source_path in argv[1:]:
723 modname = dotted_name_of_path(source_path) 727 modname = dotted_name_of_path(source_path)
724 localmodpaths[modname] = source_path 728 localmodpaths[modname] = source_path
725 localmods = populateextmods(localmodpaths) 729 localmods = populateextmods(localmodpaths)
726 for localmodname, source_path in sorted(localmodpaths.items()): 730 for localmodname, source_path in sorted(localmodpaths.items()):
731 if not isinstance(localmodname, bytes):
732 # This is only safe because all hg's files are ascii
733 localmodname = localmodname.encode('ascii')
727 for src, modname, name, line in sources(source_path, localmodname): 734 for src, modname, name, line in sources(source_path, localmodname):
728 try: 735 try:
729 used_imports[modname] = sorted( 736 used_imports[modname] = sorted(
730 imported_modules(src, modname, name, localmods, 737 imported_modules(src, modname, name, localmods,
731 ignore_nested=True)) 738 ignore_nested=True))