summaryrefslogtreecommitdiffstats
path: root/Lib
diff options
context:
space:
mode:
authorÉric Araujo <merwok@netwok.org>2011-07-08 15:22:19 (GMT)
committerÉric Araujo <merwok@netwok.org>2011-07-08 15:22:19 (GMT)
commit4468e55d4bd2a9ac4c6aeaffeb99653b7737ebd6 (patch)
treed09de80ea8f28dec7d463e4f653a590c5b43709b /Lib
parentce5fe83878c56ac17007e88148714ee523e64c94 (diff)
downloadcpython-4468e55d4bd2a9ac4c6aeaffeb99653b7737ebd6.zip
cpython-4468e55d4bd2a9ac4c6aeaffeb99653b7737ebd6.tar.gz
cpython-4468e55d4bd2a9ac4c6aeaffeb99653b7737ebd6.tar.bz2
Close file handles in a timely manner in packaging.database (#12504).
This fixes a bug with the remove (uninstall) feature on Windows. Patch by Thomas Holmes.
Diffstat (limited to 'Lib')
-rw-r--r--Lib/packaging/database.py12
-rw-r--r--Lib/packaging/tests/test_uninstall.py2
2 files changed, 7 insertions, 7 deletions
diff --git a/Lib/packaging/database.py b/Lib/packaging/database.py
index 67946a2..c71d608 100644
--- a/Lib/packaging/database.py
+++ b/Lib/packaging/database.py
@@ -158,17 +158,18 @@ class Distribution:
self.name, self.version, self.path)
def _get_records(self, local=False):
+ results = []
with self.get_distinfo_file('RECORD') as record:
record_reader = csv.reader(record, delimiter=',',
lineterminator='\n')
- # XXX needs an explaining comment
for row in record_reader:
- path, checksum, size = (row[:] +
- [None for i in range(len(row), 3)])
+ missing = [None for i in range(len(row), 3)]
+ path, checksum, size = row + missing
if local:
path = path.replace('/', os.sep)
path = os.path.join(sys.prefix, path)
- yield path, checksum, size
+ results.append((path, checksum, size))
+ return results
def get_resource_path(self, relative_path):
with self.get_distinfo_file('RESOURCES') as resources_file:
@@ -197,7 +198,8 @@ class Distribution:
:type local: boolean
:returns: iterator of (path, md5, size)
"""
- return self._get_records(local)
+ for result in self._get_records(local):
+ yield result
def uses(self, path):
"""
diff --git a/Lib/packaging/tests/test_uninstall.py b/Lib/packaging/tests/test_uninstall.py
index 0ef7f3b..c7702de 100644
--- a/Lib/packaging/tests/test_uninstall.py
+++ b/Lib/packaging/tests/test_uninstall.py
@@ -93,7 +93,6 @@ class UninstallTestCase(support.TempdirManager,
self.assertRaises(PackagingError, remove, 'Foo',
paths=[self.root_dir])
- @unittest.skipIf(sys.platform == 'win32', 'deactivated for now')
def test_uninstall(self):
dist, install_lib = self.install_dist()
self.assertIsFile(install_lib, 'foo', '__init__.py')
@@ -103,7 +102,6 @@ class UninstallTestCase(support.TempdirManager,
self.assertIsNotFile(install_lib, 'foo', 'sub', '__init__.py')
self.assertIsNotFile(install_lib, 'Foo-0.1.dist-info', 'RECORD')
- @unittest.skipIf(sys.platform == 'win32', 'deactivated for now')
def test_remove_issue(self):
# makes sure if there are OSErrors (like permission denied)
# remove() stops and display a clean error