[Python-checkins] distutils2: Fix database.Distribution.list_distinfo_files (#12785).

eric.araujo python-checkins at python.org
Mon Sep 19 15:12:39 CEST 2011


http://hg.python.org/distutils2/rev/5e49c9bc43eb
changeset: 1150:5e49c9bc43eb
user: Éric Araujo <merwok at netwok.org>
date: Sun Sep 18 21:12:17 2011 +0200
summary:
 Fix database.Distribution.list_distinfo_files (#12785).
This method was supposed to return only the file under the dist-info
directory, but it actually returned all installed files.
The tests didn’t catch this because they were flawed; I updated them.
files:
 distutils2/database.py | 4 +-
 distutils2/tests/test_database.py | 52 +++++++++---------
 2 files changed, 29 insertions(+), 27 deletions(-)
diff --git a/distutils2/database.py b/distutils2/database.py
--- a/distutils2/database.py
+++ b/distutils2/database.py
@@ -273,7 +273,9 @@
 :returns: iterator of paths
 """
 for path, checksum, size in self._get_records(local):
- yield path
+ # XXX add separator or use real relpath algo
+ if path.startswith(self.path):
+ yield path
 
 def __eq__(self, other):
 return isinstance(other, Distribution) and self.path == other.path
diff --git a/distutils2/tests/test_database.py b/distutils2/tests/test_database.py
--- a/distutils2/tests/test_database.py
+++ b/distutils2/tests/test_database.py
@@ -4,10 +4,6 @@
 import shutil
 import tempfile
 try:
- from os.path import relpath # separate import for backport concerns
-except:
- from distutils2._backport.path import relpath
-try:
 from hashlib import md5
 except ImportError:
 from distutils2._backport.hashlib import md5
@@ -40,11 +36,11 @@
 return checksum.hexdigest()
 
 
-def record_pieces(file):
- path = relpath(file, sys.prefix)
- digest = get_hexdigest(file)
- size = os.path.getsize(file)
- return [path, digest, size]
+def record_pieces(path):
+ path = os.path.join(*path)
+ digest = get_hexdigest(path)
+ size = os.path.getsize(path)
+ return path, digest, size
 
 
 class FakeDistsMixin(object):
@@ -58,7 +54,8 @@
 # distributions
 tmpdir = tempfile.mkdtemp()
 self.addCleanup(shutil.rmtree, tmpdir)
- self.fake_dists_path = os.path.join(tmpdir, 'fake_dists')
+ self.fake_dists_path = os.path.realpath(
+ os.path.join(tmpdir, 'fake_dists'))
 fake_dists_src = os.path.abspath(
 os.path.join(os.path.dirname(__file__), 'fake_dists'))
 shutil.copytree(fake_dists_src, self.fake_dists_path)
@@ -151,12 +148,10 @@
 
 for path, dirs, files in os.walk(dist_location):
 for f in files:
- record_writer.writerow(record_pieces(
- os.path.join(path, f)))
+ record_writer.writerow(record_pieces((path, f)))
 for file in ('INSTALLER', 'METADATA', 'REQUESTED'):
- record_writer.writerow(record_pieces(
- os.path.join(distinfo_dir, file)))
- record_writer.writerow([relpath(record_file, sys.prefix)])
+ record_writer.writerow(record_pieces((distinfo_dir, file)))
+ record_writer.writerow([record_file])
 finally:
 fp.close()
 
@@ -186,15 +181,17 @@
 distinfo_name + '.dist-info')
 true_path = [self.fake_dists_path, distinfo_name,
 'grammar', 'utils.py']
- true_path = relpath(os.path.join(*true_path), sys.prefix)
+ true_path = os.path.join(*true_path)
 false_path = [self.fake_dists_path, 'towel_stuff-0.1', 'towel_stuff',
 '__init__.py']
- false_path = relpath(os.path.join(*false_path), sys.prefix)
+ false_path = os.path.join(*false_path)
 
 # Test if the distribution uses the file in question
 dist = Distribution(distinfo_dir)
- self.assertTrue(dist.uses(true_path))
- self.assertFalse(dist.uses(false_path))
+ self.assertTrue(dist.uses(true_path), 'dist %r is supposed to use %r' %
+ (dist, true_path))
+ self.assertFalse(dist.uses(false_path), 'dist %r is not supposed to '
+ 'use %r' % (dist, true_path))
 
 def test_get_distinfo_file(self):
 # Test the retrieval of dist-info file objects.
@@ -233,20 +230,23 @@
 'MAGICFILE')
 
 def test_list_distinfo_files(self):
- # Test for the iteration of RECORD path entries.
 distinfo_name = 'towel_stuff-0.1'
 distinfo_dir = os.path.join(self.fake_dists_path,
 distinfo_name + '.dist-info')
 dist = Distribution(distinfo_dir)
 # Test for the iteration of the raw path
- distinfo_record_paths = self.records[distinfo_dir].keys()
+ distinfo_files = [os.path.join(distinfo_dir, filename) for filename in
+ os.listdir(distinfo_dir)]
 found = dist.list_distinfo_files()
- self.assertEqual(sorted(found), sorted(distinfo_record_paths))
+ self.assertEqual(sorted(found), sorted(distinfo_files))
 # Test for the iteration of local absolute paths
- distinfo_record_paths = [os.path.join(sys.prefix, path)
- for path in self.records[distinfo_dir]]
- found = dist.list_distinfo_files(local=True)
- self.assertEqual(sorted(found), sorted(distinfo_record_paths))
+ distinfo_files = [os.path.join(sys.prefix, distinfo_dir, path) for
+ path in distinfo_files]
+ found = sorted(dist.list_distinfo_files(local=True))
+ if os.sep != '/':
+ self.assertNotIn('/', found[0])
+ self.assertIn(os.sep, found[0])
+ self.assertEqual(found, sorted(distinfo_files))
 
 def test_get_resources_path(self):
 distinfo_name = 'babar-0.1'
-- 
Repository URL: http://hg.python.org/distutils2


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /