From c8a99de7513abe90716750090658e7e910664822 Mon Sep 17 00:00:00 2001 From: Barry Warsaw Date: Thu, 29 Apr 2010 18:43:10 +0000 Subject: Bug 8563 - compileall.compile_file() creates empty __pycache__ directories in data directories where there is no source. Fix by: Arfrever Frehtes Taifersar Arahesis (Arfrever) Test by: Barry --- Lib/compileall.py | 11 ++++++----- Lib/test/test_compileall.py | 13 +++++++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/Lib/compileall.py b/Lib/compileall.py index be9e2ad..ea2ee7f 100644 --- a/Lib/compileall.py +++ b/Lib/compileall.py @@ -91,13 +91,14 @@ def compile_file(fullname, ddir=None, force=0, rx=None, quiet=False, else: cfile = imp.cache_from_source(fullname) cache_dir = os.path.dirname(cfile) - try: - os.mkdir(cache_dir) - except OSError as error: - if error.errno != errno.EEXIST: - raise head, tail = name[:-3], name[-3:] if tail == '.py': + if not legacy: + try: + os.mkdir(cache_dir) + except OSError as error: + if error.errno != errno.EEXIST: + raise if not force: try: mtime = int(os.stat(fullname).st_mtime) diff --git a/Lib/test/test_compileall.py b/Lib/test/test_compileall.py index fe26026..4ad0061 100644 --- a/Lib/test/test_compileall.py +++ b/Lib/test/test_compileall.py @@ -75,6 +75,18 @@ class CompileallTests(unittest.TestCase): os.unlink(self.bc_path) os.unlink(self.bc_path2) + def test_no_pycache_in_non_package(self): + # Bug 8563 reported that __pycache__ directories got created by + # compile_file() for non-.py files. + data_dir = os.path.join(self.directory, 'data') + data_file = os.path.join(data_dir, 'file') + os.mkdir(data_dir) + # touch data/file + with open(data_file, 'w'): + pass + compileall.compile_file(data_file) + self.assertFalse(os.path.exists(os.path.join(data_dir, '__pycache__'))) + class EncodingTest(unittest.TestCase): """Issue 6716: compileall should escape source code when printing errors @@ -98,6 +110,7 @@ class EncodingTest(unittest.TestCase): finally: sys.stdout = orig_stdout + class CommandLineTests(unittest.TestCase): """Test some aspects of compileall's CLI.""" -- cgit v0.12