]> granicus.if.org Git - python/commitdiff
Merged revisions 76113-76114 via svnmerge from
authorBrett Cannon <bcannon@gmail.com>
Thu, 5 Nov 2009 01:34:30 +0000 (01:34 +0000)
committerBrett Cannon <bcannon@gmail.com>
Thu, 5 Nov 2009 01:34:30 +0000 (01:34 +0000)
svn+ssh://pythondev@svn.python.org/python/branches/py3k

........
  r76113 | brett.cannon | 2009-11-04 17:17:22 -0800 (Wed, 04 Nov 2009) | 3 lines

  importlib.test.source.util referenced variables in the 'finally' part of a
  try/finally which may not have been set.
........
  r76114 | brett.cannon | 2009-11-04 17:26:57 -0800 (Wed, 04 Nov 2009) | 6 lines

  Use tempfile.mkdtemp() instead of tempfile.tempdir for where importlib places
  source files for tests. Allows for concurrent execution of the tests by
  preventing various executions from trampling each other.

  Closes issue #7248.
........

Lib/importlib/test/source/util.py
Misc/NEWS

index ca04edfa97c2027ea7aeba64a86bff450d25d61b..2b945c59364486812dfe8a2c1769991663ee7ebc 100644 (file)
@@ -42,8 +42,8 @@ def create_modules(*names):
     that contains the name passed into the context manager that caused the
     creation of the module.
 
-    All files are created in a temporary directory specified by
-    tempfile.gettempdir(). This directory is inserted at the beginning of
+    All files are created in a temporary directory returned by
+    tempfile.mkdtemp(). This directory is inserted at the beginning of
     sys.path. When the context manager exits all created files (source and
     bytecode) are explicitly deleted.
 
@@ -55,8 +55,10 @@ def create_modules(*names):
     source = 'attr = {0!r}'
     created_paths = []
     mapping = {}
+    state_manager = None
+    uncache_manager = None
     try:
-        temp_dir = tempfile.gettempdir()
+        temp_dir = tempfile.mkdtemp()
         mapping['.root'] = temp_dir
         import_names = set()
         for name in names:
@@ -85,13 +87,8 @@ def create_modules(*names):
         state_manager.__enter__()
         yield mapping
     finally:
-        state_manager.__exit__(None, None, None)
-        uncache_manager.__exit__(None, None, None)
-        # Reverse the order for path removal to unroll directory creation.
-        for path in reversed(created_paths):
-            if file_path.endswith('.py'):
-                support.unlink(path)
-                support.unlink(path + 'c')
-                support.unlink(path + 'o')
-            else:
-                os.rmdir(path)
+        if state_manager is not None:
+            state_manager.__exit__(None, None, None)
+        if uncache_manager is not None:
+            uncache_manager.__exit__(None, None, None)
+        support.rmtree(temp_dir)
index d7de60fef67c0c68fc30a880c6af4388f4917c99..c67407f8afee1651fac2198bfa5f7e0378d7edbb 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -134,6 +134,14 @@ Extension Modules
 Tests
 -----
 
+- Issue #7248 (part 2): Use a unique temporary directory for importlib source
+  tests instead of tempfile.tempdir. This prevents the tests from sharing state
+  between concurrent executions on the same system.
+
+- Issue #7248: In importlib.test.source.util a try/finally block did not make
+  sure that some referenced objects actually were created in the block before
+  calling methods on the object.
+
 - Issue #7055: test___all__ now greedily detects all modules which have an
   __all__ attribute, rather than using a hardcoded and incomplete list.