]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
Bug 8527 - multiple compileall calls produce cascading __pycache__ directories.
authorBarry Warsaw <barry@python.org>
Mon, 26 Apr 2010 15:59:03 +0000 (15:59 +0000)
committerBarry Warsaw <barry@python.org>
Mon, 26 Apr 2010 15:59:03 +0000 (15:59 +0000)
* Patch contributed by Arfrever Frehtes Taifersar Arahesis.
* Test added by Barry

Also, improve Makefile's deletion of __pycache__ directories so e.g. 'make
distclean' doesn't fail if no __pycache__ directories exist.

Lib/compileall.py
Lib/test/test_compileall.py
Makefile.pre.in

index d9d78161cc33891a7df4b4115d033d96adc8c04d..be9e2ad05f0b6e7f69159c8c5c8d37b6a90e4c3b 100644 (file)
@@ -45,6 +45,8 @@ def compile_dir(dir, maxlevels=10, ddir=None,
     names.sort()
     success = 1
     for name in names:
+        if name == '__pycache__':
+            continue
         fullname = os.path.join(dir, name)
         if ddir is not None:
             dfile = os.path.join(ddir, name)
index 8b345873906cac187b66de2c68fa8d331794037d..fe26026bd7717e2762e564b96f670072af608f5a 100644 (file)
@@ -150,6 +150,24 @@ class CommandLineTests(unittest.TestCase):
         expected.sort()
         self.assertEqual(sorted(os.listdir(self.pkgdir)), expected)
 
+    def test_multiple_runs(self):
+        # Bug 8527 reported that multiple calls produced empty
+        # __pycache__/__pycache__ directories.
+        retcode = subprocess.call(
+            (sys.executable, '-m', 'compileall', '-q', self.pkgdir))
+        self.assertEqual(retcode, 0)
+        # Verify the __pycache__ directory contents.
+        cachedir = os.path.join(self.pkgdir, '__pycache__')
+        self.assertTrue(os.path.exists(cachedir))
+        cachecachedir = os.path.join(cachedir, '__pycache__')
+        self.assertFalse(os.path.exists(cachecachedir))
+        # Call compileall again.
+        retcode = subprocess.call(
+            (sys.executable, '-m', 'compileall', '-q', self.pkgdir))
+        self.assertEqual(retcode, 0)
+        self.assertTrue(os.path.exists(cachedir))
+        self.assertFalse(os.path.exists(cachecachedir))
+
 
 def test_main():
     support.run_unittest(
index 745c4a7c7b50670e3dbb7e3f8fdcd851118e702b..b0b9ee4cdeb38be98ab3bd10c79f1c5d821088ed 100644 (file)
@@ -1161,7 +1161,7 @@ TAGS::
 # files, which clobber removes as well
 pycremoval:
        find $(srcdir) -name '*.py[co]' -exec rm -f {} ';'
-       find $(srcdir) -name '__pycache__' | xargs rmdir
+       find $(srcdir) -name '__pycache__' -exec rmdir {} ';'
 
 rmtestturds:
        -rm -f *BAD *GOOD *SKIPPED