diff --git a/Lib/compileall.py b/Lib/compileall.py index f1ff5ccdb98..f9ec4863df2 100644 --- a/Lib/compileall.py +++ b/Lib/compileall.py @@ -207,15 +207,15 @@ def main(): try: if compile_dests: for dest in compile_dests: - if os.path.isdir(dest): + if os.path.isfile(dest): + if not compile_file(dest, args.ddir, args.force, args.rx, + args.quiet, args.legacy): + success = False + else: if not compile_dir(dest, args.maxlevels, args.ddir, args.force, args.rx, args.quiet, args.legacy): success = False - else: - if not compile_file(dest, args.ddir, args.force, args.rx, - args.quiet, args.legacy): - success = False return success else: return compile_path(legacy=args.legacy) diff --git a/Lib/test/test_compileall.py b/Lib/test/test_compileall.py index cd08a8ef963..3f333a58dbf 100644 --- a/Lib/test/test_compileall.py +++ b/Lib/test/test_compileall.py @@ -124,14 +124,15 @@ class EncodingTest(unittest.TestCase): class CommandLineTests(unittest.TestCase): """Test compileall's CLI.""" - def assertRunOK(self, *args): - rc, out, err = script_helper.assert_python_ok('-m', 'compileall', *args) + def assertRunOK(self, *args, **env_vars): + rc, out, err = script_helper.assert_python_ok( + '-m', 'compileall', *args, **env_vars) self.assertEqual(b'', err) return out - def assertRunNotOK(self, *args): + def assertRunNotOK(self, *args, **env_vars): rc, out, err = script_helper.assert_python_failure( - '-m', 'compileall', *args) + '-m', 'compileall', *args, **env_vars) return rc, out, err def assertCompiled(self, fn): @@ -149,12 +150,17 @@ class CommandLineTests(unittest.TestCase): # Create the __init__.py and a package module. self.initfn = script_helper.make_script(self.pkgdir, '__init__', '') self.barfn = script_helper.make_script(self.pkgdir, 'bar', '') - sys.path.insert(0, self.directory) def _cleanup(self): support.rmtree(self.directory) - assert sys.path[0] == self.directory, 'Missing path' - del sys.path[0] + + def test_no_args_compiles_path(self): + # Note that -l is implied for the no args case. + bazfn = script_helper.make_script(self.directory, 'baz', '') + self.assertRunOK(PYTHONPATH=self.directory) + self.assertCompiled(bazfn) + self.assertNotCompiled(self.initfn) + self.assertNotCompiled(self.barfn) # Ensure that the default behavior of compileall's CLI is to create # PEP 3147 pyc/pyo files. @@ -322,11 +328,14 @@ class CommandLineTests(unittest.TestCase): bingfn = script_helper.make_script(self.pkgdir, 'bing', 'syntax(error') rc, out, err = self.assertRunNotOK('nosuchfile', self.initfn, bingfn, self.barfn) - self.assertRegex(b'rror', err) + self.assertRegex(out, b'rror') self.assertNotCompiled(bingfn) self.assertCompiled(self.initfn) self.assertCompiled(self.barfn) + def test_invalid_arg_produces_message(self): + out = self.assertRunOK('badfilename') + self.assertRegex(out, b"Can't list badfilename") def test_main():