[Python-checkins] cpython: Stop converting package_data to extra_files in pysetup create (#13712).

eric.araujo python-checkins at python.org
Sun Feb 5 10:49:22 CET 2012


http://hg.python.org/cpython/rev/edb6f9fb54ac
changeset:   74781:edb6f9fb54ac
user:        Éric Araujo <merwok at netwok.org>
date:        Sun Feb 05 10:26:16 2012 +0100
summary:
  Stop converting package_data to extra_files in pysetup create (#13712).

pysetup create, the setup.cfg creation helper, used to convert
package_data (from an existing setup.py) into extra_files, the
replacement for MANIFEST.in, but these files are only present in sdists,
not installed: they don’t have the same use case at all, so converting
one into the other did not work.

files:
  Lib/packaging/create.py            |  36 ++++++++++-------
  Lib/packaging/tests/test_create.py |  25 ++++++------
  Misc/NEWS                          |   2 +
  3 files changed, 35 insertions(+), 28 deletions(-)


diff --git a/Lib/packaging/create.py b/Lib/packaging/create.py
--- a/Lib/packaging/create.py
+++ b/Lib/packaging/create.py
@@ -287,6 +287,7 @@
 
             # optional string entries
             if 'keywords' in self.data and self.data['keywords']:
+                # XXX shoud use comma to separate, not space
                 fp.write('keywords = %s\n' % ' '.join(self.data['keywords']))
             for name in ('home_page', 'author', 'author_email',
                          'maintainer', 'maintainer_email', 'description-file'):
@@ -306,17 +307,29 @@
                 fp.write('%s = ' % name)
                 fp.write(''.join('    %s\n' % val
                                  for val in self.data[name]).lstrip())
+
             fp.write('\n[files]\n')
-            for name in ('packages', 'modules', 'scripts',
-                         'package_data', 'extra_files'):
+
+            for name in ('packages', 'modules', 'scripts', 'extra_files'):
                 if not(name in self.data and self.data[name]):
                     continue
                 fp.write('%s = %s\n'
                          % (name, '\n    '.join(self.data[name]).strip()))
-            fp.write('\nresources =\n')
-            for src, dest in self.data['resources']:
-                fp.write('    %s = %s\n' % (src, dest))
-            fp.write('\n')
+
+            if self.data.get('package_data'):
+                fp.write('package_data =\n')
+                for pkg, spec in sorted(self.data['package_data'].items()):
+                    # put one spec per line, indented under the package name
+                    indent = ' ' * (len(pkg) + 7)
+                    spec = ('\n' + indent).join(spec)
+                    fp.write('    %s = %s\n' % (pkg, spec))
+                fp.write('\n')
+
+            if self.data.get('resources'):
+                fp.write('resources =\n')
+                for src, dest in self.data['resources']:
+                    fp.write('    %s = %s\n' % (src, dest))
+                fp.write('\n')
 
         os.chmod(_FILENAME, 0o644)
         logger.info('Wrote "%s".' % _FILENAME)
@@ -349,7 +362,6 @@
                       ('long_description', 'description'),
                       ('url', 'home_page'),
                       ('platforms', 'platform'),
-                      # backport only for 2.5+
                       ('provides', 'provides-dist'),
                       ('obsoletes', 'obsoletes-dist'),
                       ('requires', 'requires-dist'))
@@ -385,14 +397,8 @@
                                  for src in srcs]
                         data['resources'].extend(files)
 
-            # 2.2 package_data -> extra_files
-            package_dirs = dist.package_dir or {}
-            for package, extras in dist.package_data.items() or []:
-                package_dir = package_dirs.get(package, package)
-                for file_ in extras:
-                    if package_dir:
-                        file_ = package_dir + '/' + file_
-                    data['extra_files'].append(file_)
+            # 2.2 package_data
+            data['package_data'] = dist.package_data.copy()
 
             # Use README file if its content is the desciption
             if "description" in data:
diff --git a/Lib/packaging/tests/test_create.py b/Lib/packaging/tests/test_create.py
--- a/Lib/packaging/tests/test_create.py
+++ b/Lib/packaging/tests/test_create.py
@@ -116,7 +116,6 @@
               package_data={
                   'babar': ['Pom', 'Flora', 'Alexander'],
                   'me': ['dady', 'mumy', 'sys', 'bro'],
-                  '':  ['setup.py', 'README'],
                   'pyxfoil': ['fengine.so'],
                            },
               scripts=['my_script', 'bin/run'],
@@ -150,16 +149,15 @@
                 mymodule
             scripts = my_script
                 bin/run
-            extra_files = Martinique/Lamentin/dady
-                Martinique/Lamentin/mumy
-                Martinique/Lamentin/sys
-                Martinique/Lamentin/bro
-                setup.py
-                README
-                Pom
-                Flora
-                Alexander
-                pyxfoil/fengine.so
+            package_data =
+                babar = Pom
+                        Flora
+                        Alexander
+                me = dady
+                     mumy
+                     sys
+                     bro
+                pyxfoil = fengine.so
 
             resources =
                 README.rst = {doc}
@@ -217,8 +215,9 @@
 
             [files]
             packages = pyxfoil
-            extra_files = pyxfoil/fengine.so
-                pyxfoil/babar.so
+            package_data =
+                pyxfoil = fengine.so
+                          babar.so
 
             resources =
                 README.rst = {doc}
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -466,6 +466,8 @@
 Library
 -------
 
+- Issue #13712: pysetup create should not convert package_data to extra_files.
+
 - Issue #11805: package_data in setup.cfg should allow more than one value.
 
 - Issue #13901: Prevent test_distutils failures on OS X with --enable-shared.

-- 
Repository URL: http://hg.python.org/cpython


More information about the Python-checkins mailing list