From: Zac Medico Date: Sun, 28 Mar 2010 01:49:52 +0000 (-0700) Subject: Add support for probing shebangs and compiling python scripts that don't X-Git-Tag: v2.2_rc68~683 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=d536979fdc49e23c44ad2d5d16daad630c987a38;p=portage.git Add support for probing shebangs and compiling python scripts that don't end with py. --- diff --git a/pym/portage/tests/lint/test_compile_modules.py b/pym/portage/tests/lint/test_compile_modules.py index ec6edfa9b..c6e68946e 100644 --- a/pym/portage/tests/lint/test_compile_modules.py +++ b/pym/portage/tests/lint/test_compile_modules.py @@ -1,22 +1,49 @@ # Copyright 2009 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -from portage.const import PORTAGE_PYM_PATH +import itertools +import stat + +from portage.const import PORTAGE_BIN_PATH, PORTAGE_PYM_PATH from portage.tests import TestCase from portage import os from portage import _encodings -from portage import _unicode_decode +from portage import _unicode_decode, _unicode_encode import py_compile class CompileModulesTestCase(TestCase): def testCompileModules(self): - for parent, dirs, files in os.walk(PORTAGE_PYM_PATH): + for parent, dirs, files in itertools.chain( + os.walk(PORTAGE_BIN_PATH), + os.walk(PORTAGE_PYM_PATH)): parent = _unicode_decode(parent, encoding=_encodings['fs'], errors='strict') for x in files: x = _unicode_decode(x, encoding=_encodings['fs'], errors='strict') + if x[-4:] in ('.pyc', '.pyo'): + continue + x = os.path.join(parent, x) + st = os.lstat(x) + if not stat.S_ISREG(st.st_mode): + continue + do_compile = False + cfile = x if x[-3:] == '.py': - py_compile.compile(os.path.join(parent, x), doraise=True) + do_compile = True + else: + # Check for python shebang + f = open(_unicode_encode(x, + encoding=_encodings['fs'], errors='strict'), 'rb') + line = _unicode_decode(f.readline(), + encoding=_encodings['content'], errors='replace') + f.close() + if line[:2] == '#!' and \ + 'python' in line: + do_compile = True + cfile += '.py' + if do_compile: + cfile += (__debug__ and 'c' or 'o') + py_compile.compile(x, cfile=cfile, doraise=True)