Python-checkins
Threads by month
- ----- 2024 -----
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2003 -----
- December
- November
- October
- September
- August
August 2011
- 7 participants
- 597 discussions
cpython (2.7): Make bdist_* commands respect --skip-build passed to bdist (#10946)
by eric.araujo 30 Aug '11
by eric.araujo 30 Aug '11
30 Aug '11
http://hg.python.org/cpython/rev/4ff92eb1a915
changeset: 72136:4ff92eb1a915
branch: 2.7
user: Éric Araujo <merwok(a)netwok.org>
date: Tue Aug 30 01:48:59 2011 +0200
summary:
Make bdist_* commands respect --skip-build passed to bdist (#10946)
files:
Lib/distutils/command/bdist_dumb.py | 5 +-
Lib/distutils/command/bdist_msi.py | 6 +-
Lib/distutils/command/bdist_wininst.py | 6 +-
Lib/distutils/tests/test_bdist.py | 49 ++++++++------
Misc/NEWS | 3 +
5 files changed, 44 insertions(+), 25 deletions(-)
diff --git a/Lib/distutils/command/bdist_dumb.py b/Lib/distutils/command/bdist_dumb.py
--- a/Lib/distutils/command/bdist_dumb.py
+++ b/Lib/distutils/command/bdist_dumb.py
@@ -58,7 +58,7 @@
self.format = None
self.keep_temp = 0
self.dist_dir = None
- self.skip_build = 0
+ self.skip_build = None
self.relative = 0
self.owner = None
self.group = None
@@ -78,7 +78,8 @@
self.set_undefined_options('bdist',
('dist_dir', 'dist_dir'),
- ('plat_name', 'plat_name'))
+ ('plat_name', 'plat_name'),
+ ('skip_build', 'skip_build'))
def run(self):
if not self.skip_build:
diff --git a/Lib/distutils/command/bdist_msi.py b/Lib/distutils/command/bdist_msi.py
--- a/Lib/distutils/command/bdist_msi.py
+++ b/Lib/distutils/command/bdist_msi.py
@@ -131,18 +131,22 @@
self.no_target_optimize = 0
self.target_version = None
self.dist_dir = None
- self.skip_build = 0
+ self.skip_build = None
self.install_script = None
self.pre_install_script = None
self.versions = None
def finalize_options (self):
+ self.set_undefined_options('bdist', ('skip_build', 'skip_build'))
+
if self.bdist_dir is None:
bdist_base = self.get_finalized_command('bdist').bdist_base
self.bdist_dir = os.path.join(bdist_base, 'msi')
+
short_version = get_python_version()
if (not self.target_version) and self.distribution.has_ext_modules():
self.target_version = short_version
+
if self.target_version:
self.versions = [self.target_version]
if not self.skip_build and self.distribution.has_ext_modules()\
diff --git a/Lib/distutils/command/bdist_wininst.py b/Lib/distutils/command/bdist_wininst.py
--- a/Lib/distutils/command/bdist_wininst.py
+++ b/Lib/distutils/command/bdist_wininst.py
@@ -71,7 +71,7 @@
self.dist_dir = None
self.bitmap = None
self.title = None
- self.skip_build = 0
+ self.skip_build = None
self.install_script = None
self.pre_install_script = None
self.user_access_control = None
@@ -80,6 +80,8 @@
def finalize_options (self):
+ self.set_undefined_options('bdist', ('skip_build', 'skip_build'))
+
if self.bdist_dir is None:
if self.skip_build and self.plat_name:
# If build is skipped and plat_name is overridden, bdist will
@@ -89,8 +91,10 @@
# next the command will be initialized using that name
bdist_base = self.get_finalized_command('bdist').bdist_base
self.bdist_dir = os.path.join(bdist_base, 'wininst')
+
if not self.target_version:
self.target_version = ""
+
if not self.skip_build and self.distribution.has_ext_modules():
short_version = get_python_version()
if self.target_version and self.target_version != short_version:
diff --git a/Lib/distutils/tests/test_bdist.py b/Lib/distutils/tests/test_bdist.py
--- a/Lib/distutils/tests/test_bdist.py
+++ b/Lib/distutils/tests/test_bdist.py
@@ -1,42 +1,49 @@
"""Tests for distutils.command.bdist."""
+import os
import unittest
-import sys
-import os
-import tempfile
-import shutil
from test.test_support import run_unittest
-from distutils.core import Distribution
from distutils.command.bdist import bdist
from distutils.tests import support
-from distutils.spawn import find_executable
-from distutils import spawn
-from distutils.errors import DistutilsExecError
+
class BuildTestCase(support.TempdirManager,
unittest.TestCase):
def test_formats(self):
-
# let's create a command and make sure
- # we can fix the format
- pkg_pth, dist = self.create_dist()
+ # we can set the format
+ dist = self.create_dist()[1]
cmd = bdist(dist)
cmd.formats = ['msi']
cmd.ensure_finalized()
self.assertEqual(cmd.formats, ['msi'])
- # what format bdist offers ?
- # XXX an explicit list in bdist is
- # not the best way to bdist_* commands
- # we should add a registry
- formats = ['rpm', 'zip', 'gztar', 'bztar', 'ztar',
- 'tar', 'wininst', 'msi']
- formats.sort()
- founded = cmd.format_command.keys()
- founded.sort()
- self.assertEqual(founded, formats)
+ # what formats does bdist offer?
+ formats = ['bztar', 'gztar', 'msi', 'rpm', 'tar',
+ 'wininst', 'zip', 'ztar']
+ found = sorted(cmd.format_command)
+ self.assertEqual(found, formats)
+
+ def test_skip_build(self):
+ # bug #10946: bdist --skip-build should trickle down to subcommands
+ dist = self.create_dist()[1]
+ cmd = bdist(dist)
+ cmd.skip_build = 1
+ cmd.ensure_finalized()
+ dist.command_obj['bdist'] = cmd
+
+ names = ['bdist_dumb', 'bdist_wininst']
+ # bdist_rpm does not support --skip-build
+ if os.name == 'nt':
+ names.append('bdist_msi')
+
+ for name in names:
+ subcmd = cmd.get_finalized_command(name)
+ self.assertTrue(subcmd.skip_build,
+ '%s should take --skip-build from bdist' % name)
+
def test_suite():
return unittest.makeSuite(BuildTestCase)
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -40,6 +40,9 @@
Library
-------
+- Issue #10946: The distutils commands bdist_dumb, bdist_wininst and bdist_msi
+ now respect a --skip-build option given to bdist.
+
- Issue #12287: Fix a stack corruption in ossaudiodev module when the FD is
greater than FD_SETSIZE.
--
Repository URL: http://hg.python.org/cpython
1
0
http://hg.python.org/cpython/rev/b21b0e1478bf
changeset: 72134:b21b0e1478bf
parent: 72132:1f89017c2ce1
parent: 72133:be4194b9aa5e
user: Éric Araujo <merwok(a)netwok.org>
date: Tue Aug 30 16:21:47 2011 +0200
summary:
Merge 3.2
files:
--
Repository URL: http://hg.python.org/cpython
1
0
http://hg.python.org/cpython/rev/be4194b9aa5e
changeset: 72133:be4194b9aa5e
branch: 3.2
parent: 72121:0d9e4ce1c010
parent: 72128:326a7e44bb66
user: Éric Araujo <merwok(a)netwok.org>
date: Tue Aug 30 16:05:31 2011 +0200
summary:
Branch merge
files:
Lib/distutils/command/bdist_dumb.py | 5 +-
Lib/distutils/command/bdist_msi.py | 6 +-
Lib/distutils/command/bdist_wininst.py | 6 +-
Lib/distutils/tests/test_bdist.py | 48 +++++++------
Misc/NEWS | 3 +
5 files changed, 43 insertions(+), 25 deletions(-)
diff --git a/Lib/distutils/command/bdist_dumb.py b/Lib/distutils/command/bdist_dumb.py
--- a/Lib/distutils/command/bdist_dumb.py
+++ b/Lib/distutils/command/bdist_dumb.py
@@ -47,7 +47,7 @@
self.format = None
self.keep_temp = 0
self.dist_dir = None
- self.skip_build = 0
+ self.skip_build = None
self.relative = 0
def finalize_options(self):
@@ -65,7 +65,8 @@
self.set_undefined_options('bdist',
('dist_dir', 'dist_dir'),
- ('plat_name', 'plat_name'))
+ ('plat_name', 'plat_name'),
+ ('skip_build', 'skip_build'))
def run(self):
if not self.skip_build:
diff --git a/Lib/distutils/command/bdist_msi.py b/Lib/distutils/command/bdist_msi.py
--- a/Lib/distutils/command/bdist_msi.py
+++ b/Lib/distutils/command/bdist_msi.py
@@ -130,18 +130,22 @@
self.no_target_optimize = 0
self.target_version = None
self.dist_dir = None
- self.skip_build = 0
+ self.skip_build = None
self.install_script = None
self.pre_install_script = None
self.versions = None
def finalize_options(self):
+ self.set_undefined_options('bdist', ('skip_build', 'skip_build'))
+
if self.bdist_dir is None:
bdist_base = self.get_finalized_command('bdist').bdist_base
self.bdist_dir = os.path.join(bdist_base, 'msi')
+
short_version = get_python_version()
if (not self.target_version) and self.distribution.has_ext_modules():
self.target_version = short_version
+
if self.target_version:
self.versions = [self.target_version]
if not self.skip_build and self.distribution.has_ext_modules()\
diff --git a/Lib/distutils/command/bdist_wininst.py b/Lib/distutils/command/bdist_wininst.py
--- a/Lib/distutils/command/bdist_wininst.py
+++ b/Lib/distutils/command/bdist_wininst.py
@@ -65,13 +65,15 @@
self.dist_dir = None
self.bitmap = None
self.title = None
- self.skip_build = 0
+ self.skip_build = None
self.install_script = None
self.pre_install_script = None
self.user_access_control = None
def finalize_options(self):
+ self.set_undefined_options('bdist', ('skip_build', 'skip_build'))
+
if self.bdist_dir is None:
if self.skip_build and self.plat_name:
# If build is skipped and plat_name is overridden, bdist will
@@ -81,8 +83,10 @@
# next the command will be initialized using that name
bdist_base = self.get_finalized_command('bdist').bdist_base
self.bdist_dir = os.path.join(bdist_base, 'wininst')
+
if not self.target_version:
self.target_version = ""
+
if not self.skip_build and self.distribution.has_ext_modules():
short_version = get_python_version()
if self.target_version and self.target_version != short_version:
diff --git a/Lib/distutils/tests/test_bdist.py b/Lib/distutils/tests/test_bdist.py
--- a/Lib/distutils/tests/test_bdist.py
+++ b/Lib/distutils/tests/test_bdist.py
@@ -1,41 +1,47 @@
"""Tests for distutils.command.bdist."""
+import os
import unittest
-import sys
-import os
-import tempfile
-import shutil
from test.support import run_unittest
-from distutils.core import Distribution
from distutils.command.bdist import bdist
from distutils.tests import support
-from distutils.spawn import find_executable
-from distutils import spawn
-from distutils.errors import DistutilsExecError
+
class BuildTestCase(support.TempdirManager,
unittest.TestCase):
def test_formats(self):
-
# let's create a command and make sure
- # we can fix the format
- pkg_pth, dist = self.create_dist()
+ # we can set the format
+ dist = self.create_dist()[1]
cmd = bdist(dist)
cmd.formats = ['msi']
cmd.ensure_finalized()
self.assertEqual(cmd.formats, ['msi'])
- # what format bdist offers ?
- # XXX an explicit list in bdist is
- # not the best way to bdist_* commands
- # we should add a registry
- formats = ['rpm', 'zip', 'gztar', 'bztar', 'ztar',
- 'tar', 'wininst', 'msi']
- formats.sort()
- founded = list(cmd.format_command.keys())
- founded.sort()
- self.assertEqual(founded, formats)
+ # what formats does bdist offer?
+ formats = ['bztar', 'gztar', 'msi', 'rpm', 'tar',
+ 'wininst', 'zip', 'ztar']
+ found = sorted(cmd.format_command)
+ self.assertEqual(found, formats)
+
+ def test_skip_build(self):
+ # bug #10946: bdist --skip-build should trickle down to subcommands
+ dist = self.create_dist()[1]
+ cmd = bdist(dist)
+ cmd.skip_build = 1
+ cmd.ensure_finalized()
+ dist.command_obj['bdist'] = cmd
+
+ names = ['bdist_dumb', 'bdist_wininst'] # bdist_rpm does not support --skip-build
+ if os.name == 'nt':
+ names.append('bdist_msi')
+
+ for name in names:
+ subcmd = cmd.get_finalized_command(name)
+ self.assertTrue(subcmd.skip_build,
+ '%s should take --skip-build from bdist' % name)
+
def test_suite():
return unittest.makeSuite(BuildTestCase)
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -22,6 +22,9 @@
Library
-------
+- Issue #10946: The distutils commands bdist_dumb, bdist_wininst and bdist_msi
+ now respect a --skip-build option given to bdist.
+
- Issue #12847: Fix a crash with negative PUT and LONG_BINPUT arguments in
the C pickle implementation.
--
Repository URL: http://hg.python.org/cpython
1
0
http://hg.python.org/cpython/rev/1f89017c2ce1
changeset: 72132:1f89017c2ce1
parent: 72122:fb8d7a666bed
parent: 72131:afb12c6b79ba
user: Éric Araujo <merwok(a)netwok.org>
date: Tue Aug 30 16:21:15 2011 +0200
summary:
Branch merge
files:
Doc/install/pysetup.rst | 2 +-
Doc/packaging/builtdist.rst | 11 +-
Doc/packaging/sourcedist.rst | 9 +-
Doc/whatsnew/3.3.rst | 9 +-
Lib/distutils/command/bdist_dumb.py | 5 +-
Lib/distutils/command/bdist_msi.py | 6 +-
Lib/distutils/command/bdist_wininst.py | 6 +-
Lib/distutils/tests/test_bdist.py | 48 ++-
Lib/packaging/command/__init__.py | 10 +-
Lib/packaging/command/bdist.py | 13 +-
Lib/packaging/command/bdist_dumb.py | 20 +-
Lib/packaging/command/bdist_msi.py | 6 +-
Lib/packaging/command/bdist_wininst.py | 6 +-
Lib/packaging/command/build_ext.py | 17 +-
Lib/packaging/dist.py | 106 ++-------
Lib/packaging/run.py | 18 +-
Lib/packaging/tests/test_command_bdist.py | 57 +---
Lib/packaging/tests/test_command_bdist_dumb.py | 2 +-
Lib/packaging/tests/test_command_register.py | 2 +-
Lib/packaging/tests/test_command_sdist.py | 2 +-
Lib/packaging/tests/test_dist.py | 8 +-
Misc/NEWS | 4 +
22 files changed, 157 insertions(+), 210 deletions(-)
diff --git a/Doc/install/pysetup.rst b/Doc/install/pysetup.rst
--- a/Doc/install/pysetup.rst
+++ b/Doc/install/pysetup.rst
@@ -76,7 +76,7 @@
Name:
virtualenv
- $ pysetup metadata virtualenv --all
+ $ pysetup metadata virtualenv
Metadata-Version:
1.0
Name:
diff --git a/Doc/packaging/builtdist.rst b/Doc/packaging/builtdist.rst
--- a/Doc/packaging/builtdist.rst
+++ b/Doc/packaging/builtdist.rst
@@ -75,9 +75,6 @@
| ``gztar`` | gzipped tar file | (1),(3) |
| | (:file:`.tar.gz`) | |
+-------------+------------------------------+---------+
-| ``ztar`` | compressed tar file | \(3) |
-| | (:file:`.tar.Z`) | |
-+-------------+------------------------------+---------+
| ``tar`` | tar file (:file:`.tar`) | \(3) |
+-------------+------------------------------+---------+
| ``zip`` | zip file (:file:`.zip`) | (2),(4) |
@@ -98,8 +95,8 @@
default on Windows
(3)
- requires external utilities: :program:`tar` and possibly one of :program:`gzip`,
- :program:`bzip2`, or :program:`compress`
+ requires external utilities: :program:`tar` and possibly one of :program:`gzip`
+ or :program:`bzip2`
(4)
requires either external :program:`zip` utility or :mod:`zipfile` module (part
@@ -109,14 +106,14 @@
option; you can also use the command that directly implements the format you're
interested in. Some of these :command:`bdist` "sub-commands" actually generate
several similar formats; for instance, the :command:`bdist_dumb` command
-generates all the "dumb" archive formats (``tar``, ``ztar``, ``gztar``, and
+generates all the "dumb" archive formats (``tar``, ``gztar``, and
``zip``). The :command:`bdist` sub-commands, and the formats generated by
each, are:
+--------------------------+-----------------------+
| Command | Formats |
+==========================+=======================+
-| :command:`bdist_dumb` | tar, ztar, gztar, zip |
+| :command:`bdist_dumb` | tar, gztar, zip |
+--------------------------+-----------------------+
| :command:`bdist_wininst` | wininst |
+--------------------------+-----------------------+
diff --git a/Doc/packaging/sourcedist.rst b/Doc/packaging/sourcedist.rst
--- a/Doc/packaging/sourcedist.rst
+++ b/Doc/packaging/sourcedist.rst
@@ -32,9 +32,6 @@
| ``bztar`` | bzip2'ed tar file | |
| | (:file:`.tar.bz2`) | |
+-----------+-------------------------+---------+
-| ``ztar`` | compressed tar file | \(4) |
-| | (:file:`.tar.Z`) | |
-+-----------+-------------------------+---------+
| ``tar`` | tar file (:file:`.tar`) | |
+-----------+-------------------------+---------+
@@ -50,11 +47,7 @@
requires either external :program:`zip` utility or :mod:`zipfile` module (part
of the standard Python library since Python 1.6)
-(4)
- requires the :program:`compress` program. Notice that this format is now
- pending for deprecation and will be removed in the future versions of Python.
-
-When using any ``tar`` format (``gztar``, ``bztar``, ``ztar`` or
+When using any ``tar`` format (``gztar``, ``bztar`` or
``tar``) under Unix, you can specify the ``owner`` and ``group`` names
that will be set for each member of the archive.
diff --git a/Doc/whatsnew/3.3.rst b/Doc/whatsnew/3.3.rst
--- a/Doc/whatsnew/3.3.rst
+++ b/Doc/whatsnew/3.3.rst
@@ -91,6 +91,13 @@
(:issue:`12100`)
+crypt
+-----
+
+Addition of salf and modular crypt format to the :mod:`crypt` module.
+
+(:issue:`10924`)
+
curses
------
@@ -184,7 +191,7 @@
sys
---
-* The :mod:`sys` module has a new :func:`~sys.thread_info` :term:`struct
+* The :mod:`sys` module has a new :data:`~sys.thread_info` :term:`struct
sequence` holding informations about the thread implementation.
(:issue:`11223`)
diff --git a/Lib/distutils/command/bdist_dumb.py b/Lib/distutils/command/bdist_dumb.py
--- a/Lib/distutils/command/bdist_dumb.py
+++ b/Lib/distutils/command/bdist_dumb.py
@@ -47,7 +47,7 @@
self.format = None
self.keep_temp = 0
self.dist_dir = None
- self.skip_build = 0
+ self.skip_build = None
self.relative = 0
def finalize_options(self):
@@ -65,7 +65,8 @@
self.set_undefined_options('bdist',
('dist_dir', 'dist_dir'),
- ('plat_name', 'plat_name'))
+ ('plat_name', 'plat_name'),
+ ('skip_build', 'skip_build'))
def run(self):
if not self.skip_build:
diff --git a/Lib/distutils/command/bdist_msi.py b/Lib/distutils/command/bdist_msi.py
--- a/Lib/distutils/command/bdist_msi.py
+++ b/Lib/distutils/command/bdist_msi.py
@@ -130,18 +130,22 @@
self.no_target_optimize = 0
self.target_version = None
self.dist_dir = None
- self.skip_build = 0
+ self.skip_build = None
self.install_script = None
self.pre_install_script = None
self.versions = None
def finalize_options(self):
+ self.set_undefined_options('bdist', ('skip_build', 'skip_build'))
+
if self.bdist_dir is None:
bdist_base = self.get_finalized_command('bdist').bdist_base
self.bdist_dir = os.path.join(bdist_base, 'msi')
+
short_version = get_python_version()
if (not self.target_version) and self.distribution.has_ext_modules():
self.target_version = short_version
+
if self.target_version:
self.versions = [self.target_version]
if not self.skip_build and self.distribution.has_ext_modules()\
diff --git a/Lib/distutils/command/bdist_wininst.py b/Lib/distutils/command/bdist_wininst.py
--- a/Lib/distutils/command/bdist_wininst.py
+++ b/Lib/distutils/command/bdist_wininst.py
@@ -65,13 +65,15 @@
self.dist_dir = None
self.bitmap = None
self.title = None
- self.skip_build = 0
+ self.skip_build = None
self.install_script = None
self.pre_install_script = None
self.user_access_control = None
def finalize_options(self):
+ self.set_undefined_options('bdist', ('skip_build', 'skip_build'))
+
if self.bdist_dir is None:
if self.skip_build and self.plat_name:
# If build is skipped and plat_name is overridden, bdist will
@@ -81,8 +83,10 @@
# next the command will be initialized using that name
bdist_base = self.get_finalized_command('bdist').bdist_base
self.bdist_dir = os.path.join(bdist_base, 'wininst')
+
if not self.target_version:
self.target_version = ""
+
if not self.skip_build and self.distribution.has_ext_modules():
short_version = get_python_version()
if self.target_version and self.target_version != short_version:
diff --git a/Lib/distutils/tests/test_bdist.py b/Lib/distutils/tests/test_bdist.py
--- a/Lib/distutils/tests/test_bdist.py
+++ b/Lib/distutils/tests/test_bdist.py
@@ -1,41 +1,47 @@
"""Tests for distutils.command.bdist."""
+import os
import unittest
-import sys
-import os
-import tempfile
-import shutil
from test.support import run_unittest
-from distutils.core import Distribution
from distutils.command.bdist import bdist
from distutils.tests import support
-from distutils.spawn import find_executable
-from distutils import spawn
-from distutils.errors import DistutilsExecError
+
class BuildTestCase(support.TempdirManager,
unittest.TestCase):
def test_formats(self):
-
# let's create a command and make sure
- # we can fix the format
- pkg_pth, dist = self.create_dist()
+ # we can set the format
+ dist = self.create_dist()[1]
cmd = bdist(dist)
cmd.formats = ['msi']
cmd.ensure_finalized()
self.assertEqual(cmd.formats, ['msi'])
- # what format bdist offers ?
- # XXX an explicit list in bdist is
- # not the best way to bdist_* commands
- # we should add a registry
- formats = ['rpm', 'zip', 'gztar', 'bztar', 'ztar',
- 'tar', 'wininst', 'msi']
- formats.sort()
- founded = list(cmd.format_command.keys())
- founded.sort()
- self.assertEqual(founded, formats)
+ # what formats does bdist offer?
+ formats = ['bztar', 'gztar', 'msi', 'rpm', 'tar',
+ 'wininst', 'zip', 'ztar']
+ found = sorted(cmd.format_command)
+ self.assertEqual(found, formats)
+
+ def test_skip_build(self):
+ # bug #10946: bdist --skip-build should trickle down to subcommands
+ dist = self.create_dist()[1]
+ cmd = bdist(dist)
+ cmd.skip_build = 1
+ cmd.ensure_finalized()
+ dist.command_obj['bdist'] = cmd
+
+ names = ['bdist_dumb', 'bdist_wininst'] # bdist_rpm does not support --skip-build
+ if os.name == 'nt':
+ names.append('bdist_msi')
+
+ for name in names:
+ subcmd = cmd.get_finalized_command(name)
+ self.assertTrue(subcmd.skip_build,
+ '%s should take --skip-build from bdist' % name)
+
def test_suite():
return unittest.makeSuite(BuildTestCase)
diff --git a/Lib/packaging/command/__init__.py b/Lib/packaging/command/__init__.py
--- a/Lib/packaging/command/__init__.py
+++ b/Lib/packaging/command/__init__.py
@@ -30,6 +30,8 @@
'upload': 'packaging.command.upload.upload',
'upload_docs': 'packaging.command.upload_docs.upload_docs'}
+# XXX use OrderedDict to preserve the grouping (build-related, install-related,
+# distribution-related)
STANDARD_COMMANDS = set(_COMMANDS)
@@ -48,9 +50,9 @@
"""Return the registered command"""
try:
cls = _COMMANDS[name]
- if isinstance(cls, str):
- cls = resolve_name(cls)
- _COMMANDS[name] = cls
- return cls
except KeyError:
raise PackagingModuleError("Invalid command %s" % name)
+ if isinstance(cls, str):
+ cls = resolve_name(cls)
+ _COMMANDS[name] = cls
+ return cls
diff --git a/Lib/packaging/command/bdist.py b/Lib/packaging/command/bdist.py
--- a/Lib/packaging/command/bdist.py
+++ b/Lib/packaging/command/bdist.py
@@ -64,20 +64,18 @@
'os2': 'zip'}
# Establish the preferred order (for the --help-formats option).
- format_commands = ['gztar', 'bztar', 'ztar', 'tar',
+ format_commands = ['gztar', 'bztar', 'tar',
'wininst', 'zip', 'msi']
# And the real information.
format_command = {'gztar': ('bdist_dumb', "gzip'ed tar file"),
'bztar': ('bdist_dumb', "bzip2'ed tar file"),
- 'ztar': ('bdist_dumb', "compressed tar file"),
'tar': ('bdist_dumb', "tar file"),
'wininst': ('bdist_wininst',
"Windows executable installer"),
'zip': ('bdist_dumb', "ZIP file"),
- 'msi': ('bdist_msi', "Microsoft Installer")
- }
-
+ 'msi': ('bdist_msi', "Microsoft Installer"),
+ }
def initialize_options(self):
self.bdist_base = None
@@ -109,8 +107,9 @@
try:
self.formats = [self.default_format[os.name]]
except KeyError:
- raise PackagingPlatformError("don't know how to create built distributions " + \
- "on platform %s" % os.name)
+ raise PackagingPlatformError(
+ "don't know how to create built distributions "
+ "on platform %s" % os.name)
if self.dist_dir is None:
self.dist_dir = "dist"
diff --git a/Lib/packaging/command/bdist_dumb.py b/Lib/packaging/command/bdist_dumb.py
--- a/Lib/packaging/command/bdist_dumb.py
+++ b/Lib/packaging/command/bdist_dumb.py
@@ -13,6 +13,7 @@
from packaging.errors import PackagingPlatformError
from packaging import logger
+
class bdist_dumb(Command):
description = 'create a "dumb" built distribution'
@@ -23,7 +24,7 @@
"platform name to embed in generated filenames "
"(default: %s)" % get_platform()),
('format=', 'f',
- "archive format to create (tar, ztar, gztar, zip)"),
+ "archive format to create (tar, gztar, zip)"),
('keep-temp', 'k',
"keep the pseudo-installation tree around after " +
"creating the distribution archive"),
@@ -44,10 +45,9 @@
boolean_options = ['keep-temp', 'skip-build', 'relative']
- default_format = { 'posix': 'gztar',
- 'nt': 'zip',
- 'os2': 'zip' }
-
+ default_format = {'posix': 'gztar',
+ 'nt': 'zip',
+ 'os2': 'zip'}
def initialize_options(self):
self.bdist_dir = None
@@ -55,7 +55,7 @@
self.format = None
self.keep_temp = False
self.dist_dir = None
- self.skip_build = False
+ self.skip_build = None
self.relative = False
self.owner = None
self.group = None
@@ -69,10 +69,12 @@
try:
self.format = self.default_format[os.name]
except KeyError:
- raise PackagingPlatformError(("don't know how to create dumb built distributions " +
- "on platform %s") % os.name)
+ raise PackagingPlatformError(
+ "don't know how to create dumb built distributions "
+ "on platform %s" % os.name)
- self.set_undefined_options('bdist', 'dist_dir', 'plat_name')
+ self.set_undefined_options('bdist',
+ 'dist_dir', 'plat_name', 'skip_build')
def run(self):
if not self.skip_build:
diff --git a/Lib/packaging/command/bdist_msi.py b/Lib/packaging/command/bdist_msi.py
--- a/Lib/packaging/command/bdist_msi.py
+++ b/Lib/packaging/command/bdist_msi.py
@@ -139,18 +139,22 @@
self.no_target_optimize = False
self.target_version = None
self.dist_dir = None
- self.skip_build = False
+ self.skip_build = None
self.install_script = None
self.pre_install_script = None
self.versions = None
def finalize_options(self):
+ self.set_undefined_options('bdist', 'skip_build')
+
if self.bdist_dir is None:
bdist_base = self.get_finalized_command('bdist').bdist_base
self.bdist_dir = os.path.join(bdist_base, 'msi')
+
short_version = get_python_version()
if (not self.target_version) and self.distribution.has_ext_modules():
self.target_version = short_version
+
if self.target_version:
self.versions = [self.target_version]
if not self.skip_build and self.distribution.has_ext_modules()\
diff --git a/Lib/packaging/command/bdist_wininst.py b/Lib/packaging/command/bdist_wininst.py
--- a/Lib/packaging/command/bdist_wininst.py
+++ b/Lib/packaging/command/bdist_wininst.py
@@ -67,13 +67,15 @@
self.dist_dir = None
self.bitmap = None
self.title = None
- self.skip_build = False
+ self.skip_build = None
self.install_script = None
self.pre_install_script = None
self.user_access_control = None
def finalize_options(self):
+ self.set_undefined_options('bdist', 'skip_build')
+
if self.bdist_dir is None:
if self.skip_build and self.plat_name:
# If build is skipped and plat_name is overridden, bdist will
@@ -83,8 +85,10 @@
# next the command will be initialized using that name
bdist_base = self.get_finalized_command('bdist').bdist_base
self.bdist_dir = os.path.join(bdist_base, 'wininst')
+
if not self.target_version:
self.target_version = ""
+
if not self.skip_build and self.distribution.has_ext_modules():
short_version = get_python_version()
if self.target_version and self.target_version != short_version:
diff --git a/Lib/packaging/command/build_ext.py b/Lib/packaging/command/build_ext.py
--- a/Lib/packaging/command/build_ext.py
+++ b/Lib/packaging/command/build_ext.py
@@ -606,8 +606,7 @@
template = "python%d%d"
if self.debug:
template = template + '_d'
- pythonlib = (template %
- (sys.hexversion >> 24, (sys.hexversion >> 16) & 0xff))
+ pythonlib = template % sys.version_info[:2]
# don't extend ext.libraries, it may be shared with other
# extensions, it is a reference to the original list
return ext.libraries + [pythonlib]
@@ -621,22 +620,19 @@
# not at this time - AIM Apr01
#if self.debug:
# template = template + '_d'
- pythonlib = (template %
- (sys.hexversion >> 24, (sys.hexversion >> 16) & 0xff))
+ pythonlib = template % sys.version_info[:2]
# don't extend ext.libraries, it may be shared with other
# extensions, it is a reference to the original list
return ext.libraries + [pythonlib]
elif sys.platform[:6] == "cygwin":
template = "python%d.%d"
- pythonlib = (template %
- (sys.hexversion >> 24, (sys.hexversion >> 16) & 0xff))
+ pythonlib = template % sys.version_info[:2]
# don't extend ext.libraries, it may be shared with other
# extensions, it is a reference to the original list
return ext.libraries + [pythonlib]
elif sys.platform[:6] == "atheos":
template = "python%d.%d"
- pythonlib = (template %
- (sys.hexversion >> 24, (sys.hexversion >> 16) & 0xff))
+ pythonlib = template % sys.version_info[:2]
# Get SHLIBS from Makefile
extra = []
for lib in sysconfig.get_config_var('SHLIBS').split():
@@ -654,9 +650,8 @@
else:
if sysconfig.get_config_var('Py_ENABLE_SHARED'):
- pythonlib = 'python{}.{}{}'.format(
- sys.hexversion >> 24, (sys.hexversion >> 16) & 0xff,
- sys.abiflags)
+ template = 'python%d%d' + sys.abiflags
+ pythonlib = template % sys.version_info[:2]
return ext.libraries + [pythonlib]
else:
return ext.libraries
diff --git a/Lib/packaging/dist.py b/Lib/packaging/dist.py
--- a/Lib/packaging/dist.py
+++ b/Lib/packaging/dist.py
@@ -1,20 +1,21 @@
-"""Class representing the distribution being built/installed/etc."""
+"""Class representing the project being built/installed/etc."""
import os
import re
+from packaging import logger
+from packaging.util import strtobool, resolve_name
+from packaging.config import Config
from packaging.errors import (PackagingOptionError, PackagingArgError,
PackagingModuleError, PackagingClassError)
+from packaging.command import get_command_class, STANDARD_COMMANDS
+from packaging.command.cmd import Command
+from packaging.metadata import Metadata
from packaging.fancy_getopt import FancyGetopt
-from packaging.util import strtobool, resolve_name
-from packaging import logger
-from packaging.metadata import Metadata
-from packaging.config import Config
-from packaging.command import get_command_class, STANDARD_COMMANDS
# Regex to define acceptable Packaging command names. This is not *quite*
-# the same as a Python NAME -- I don't allow leading underscores. The fact
-# that they're very similar is no coincidence; the default naming scheme is
+# the same as a Python name -- leading underscores are not allowed. The fact
+# that they're very similar is no coincidence: the default naming scheme is
# to look for a Python module named after the command.
command_re = re.compile(r'^[a-zA-Z]([a-zA-Z0-9_]*)$')
@@ -32,22 +33,16 @@
class Distribution:
- """The core of the Packaging. Most of the work hiding behind 'setup'
- is really done within a Distribution instance, which farms the work out
- to the Packaging commands specified on the command line.
+ """Class used to represent a project and work with it.
- Setup scripts will almost never instantiate Distribution directly,
- unless the 'setup()' function is totally inadequate to their needs.
- However, it is conceivable that a setup script might wish to subclass
- Distribution for some specialized purpose, and then pass the subclass
- to 'setup()' as the 'distclass' keyword argument. If so, it is
- necessary to respect the expectations that 'setup' has of Distribution.
- See the code for 'setup()', in run.py, for details.
+ Most of the work hiding behind 'pysetup run' is really done within a
+ Distribution instance, which farms the work out to the commands
+ specified on the command line.
"""
# 'global_options' describes the command-line options that may be
# supplied to the setup script prior to any actual commands.
- # Eg. "pysetup -n" or "pysetup --dry-run" both take advantage of
+ # Eg. "pysetup run -n" or "pysetup run --dry-run" both take advantage of
# these global options. This list should be kept to a bare minimum,
# since every global option is also valid as a command option -- and we
# don't want to pollute the commands with too many options that they
@@ -63,55 +58,14 @@
common_usage = """\
Common commands: (see '--help-commands' for more)
- pysetup run build will build the package underneath 'build/'
- pysetup run install will install the package
+ pysetup run build will build the project underneath 'build/'
+ pysetup run install will install the project
"""
# options that are not propagated to the commands
display_options = [
('help-commands', None,
"list all available commands"),
- # XXX this is obsoleted by the pysetup metadata action
- ('name', None,
- "print package name"),
- ('version', 'V',
- "print package version"),
- ('fullname', None,
- "print <package name>-<version>"),
- ('author', None,
- "print the author's name"),
- ('author-email', None,
- "print the author's email address"),
- ('maintainer', None,
- "print the maintainer's name"),
- ('maintainer-email', None,
- "print the maintainer's email address"),
- ('contact', None,
- "print the maintainer's name if known, else the author's"),
- ('contact-email', None,
- "print the maintainer's email address if known, else the author's"),
- ('url', None,
- "print the URL for this package"),
- ('license', None,
- "print the license of the package"),
- ('licence', None,
- "alias for --license"),
- ('description', None,
- "print the package description"),
- ('long-description', None,
- "print the long package description"),
- ('platforms', None,
- "print the list of platforms"),
- ('classifier', None,
- "print the list of classifiers"),
- ('keywords', None,
- "print the list of keywords"),
- ('provides', None,
- "print the list of packages/modules provided"),
- ('requires', None,
- "print the list of packages/modules required"),
- ('obsoletes', None,
- "print the list of packages/modules made obsolete"),
('use-2to3', None,
"use 2to3 to make source python 3.x compatible"),
('convert-2to3-doctests', None,
@@ -347,7 +301,6 @@
self.commands = []
parser = FancyGetopt(toplevel_options + self.display_options)
parser.set_negative_aliases(self.negative_opt)
- parser.set_aliases({'licence': 'license'})
args = parser.getopt(args=self.script_args, object=self)
option_order = parser.get_option_order()
@@ -372,7 +325,7 @@
commands=self.commands)
return
- return 1
+ return True
def _get_toplevel_options(self):
"""Return the non-display options recognized at the top level.
@@ -496,13 +449,10 @@
If 'global_options' is true, lists the global options:
--dry-run, etc. If 'display_options' is true, lists
- the "display-only" options: --name, --version, etc. Finally,
+ the "display-only" options: --help-commands. Finally,
lists per-command help for every command name or command class
in 'commands'.
"""
- # late import because of mutual dependence between these modules
- from packaging.command.cmd import Command
-
if global_options:
if display_options:
options = self._get_toplevel_options()
@@ -536,9 +486,8 @@
def handle_display_options(self, option_order):
"""If there were any non-global "display-only" options
- (--help-commands or the metadata display options) on the command
- line, display the requested info and return true; else return
- false.
+ (--help-commands) on the command line, display the requested info and
+ return true; else return false.
"""
# User just wants a list of commands -- we'll print it out and stop
# processing now (ie. if they ran "setup --help-commands foo bar",
@@ -547,7 +496,7 @@
self.print_commands()
print()
print(gen_usage(self.script_name))
- return 1
+ return True
# If user supplied any of the "display metadata" options, then
# display that metadata in the order in which the user supplied the
@@ -628,18 +577,17 @@
"""
cmd_obj = self.command_obj.get(command)
if not cmd_obj and create:
- logger.debug("Distribution.get_command_obj(): " \
+ logger.debug("Distribution.get_command_obj(): "
"creating %r command object", command)
cls = get_command_class(command)
cmd_obj = self.command_obj[command] = cls(self)
self.have_run[command] = 0
- # Set any options that were supplied in config files
- # or on the command line. (NB. support for error
- # reporting is lame here: any errors aren't reported
- # until 'finalize_options()' is called, which means
- # we won't report the source of the error.)
+ # Set any options that were supplied in config files or on the
+ # command line. (XXX support for error reporting is suboptimal
+ # here: errors aren't reported until finalize_options is called,
+ # which means we won't report the source of the error.)
options = self.command_options.get(command)
if options:
self._set_command_options(cmd_obj, options)
@@ -707,7 +655,6 @@
Returns the reinitialized command object.
"""
- from packaging.command.cmd import Command
if not isinstance(command, Command):
command_name = command
command = self.get_command_obj(command_name)
@@ -716,6 +663,7 @@
if not command.finalized:
return command
+
command.initialize_options()
self.have_run[command_name] = 0
command.finalized = False
diff --git a/Lib/packaging/run.py b/Lib/packaging/run.py
--- a/Lib/packaging/run.py
+++ b/Lib/packaging/run.py
@@ -71,8 +71,8 @@
"""
metadata_usage = """\
-Usage: pysetup metadata [dist] [-f field ...]
- or: pysetup metadata [dist] [--all]
+Usage: pysetup metadata [dist]
+ or: pysetup metadata [dist] [-f field ...]
or: pysetup metadata --help
Print metadata for the distribution.
@@ -81,8 +81,7 @@
dist installed distribution name
optional arguments:
- -f metadata field to print
- --all print all metadata fields
+ -f metadata field to print; omit to get all fields
"""
remove_usage = """\
@@ -252,7 +251,7 @@
@action_help(metadata_usage)
def _metadata(dispatcher, args, **kw):
- opts = _parse_args(args[1:], 'f:', ['all'])
+ opts = _parse_args(args[1:], 'f:', [])
if opts['args']:
name = opts['args'][0]
dist = get_distribution(name, use_egg_info=True)
@@ -269,13 +268,10 @@
metadata = dist.metadata
- if 'all' in opts:
+ if 'f' in opts:
+ keys = (k for k in opts['f'] if k in metadata)
+ else:
keys = metadata.keys()
- else:
- if 'f' in opts:
- keys = (k for k in opts['f'] if k in metadata)
- else:
- keys = ()
for key in keys:
if key in metadata:
diff --git a/Lib/packaging/tests/test_command_bdist.py b/Lib/packaging/tests/test_command_bdist.py
--- a/Lib/packaging/tests/test_command_bdist.py
+++ b/Lib/packaging/tests/test_command_bdist.py
@@ -1,8 +1,6 @@
"""Tests for distutils.command.bdist."""
-
-from packaging import util
+import os
from packaging.command.bdist import bdist, show_formats
-
from packaging.tests import unittest, support, captured_stdout
@@ -10,55 +8,38 @@
support.LoggingCatcher,
unittest.TestCase):
- def _mock_get_platform(self):
- self._get_platform_called = True
- return self._get_platform()
-
- def setUp(self):
- super(BuildTestCase, self).setUp()
-
- # mock util.get_platform
- self._get_platform_called = False
- self._get_platform = util.get_platform
- util.get_platform = self._mock_get_platform
-
- def tearDown(self):
- super(BuildTestCase, self).tearDown()
- util.get_platform = self._get_platform
-
def test_formats(self):
-
# let's create a command and make sure
- # we can fix the format
- pkg_pth, dist = self.create_dist()
+ # we can set the format
+ dist = self.create_dist()[1]
cmd = bdist(dist)
cmd.formats = ['msi']
cmd.ensure_finalized()
self.assertEqual(cmd.formats, ['msi'])
- # what format bdist offers ?
- # XXX an explicit list in bdist is
- # not the best way to bdist_* commands
- # we should add a registry
- formats = sorted(('zip', 'gztar', 'bztar', 'ztar',
- 'tar', 'wininst', 'msi'))
+ # what formats does bdist offer?
+ # XXX hard-coded lists are not the best way to find available bdist_*
+ # commands; we should add a registry
+ formats = ['bztar', 'gztar', 'msi', 'tar', 'wininst', 'zip']
found = sorted(cmd.format_command)
self.assertEqual(found, formats)
def test_skip_build(self):
- pkg_pth, dist = self.create_dist()
- cmd = bdist(dist)
- cmd.skip_build = False
- cmd.formats = ['ztar']
- cmd.ensure_finalized()
- self.assertFalse(self._get_platform_called)
-
- pkg_pth, dist = self.create_dist()
+ # bug #10946: bdist --skip-build should trickle down to subcommands
+ dist = self.create_dist()[1]
cmd = bdist(dist)
cmd.skip_build = True
- cmd.formats = ['ztar']
cmd.ensure_finalized()
- self.assertTrue(self._get_platform_called)
+ dist.command_obj['bdist'] = cmd
+
+ names = ['bdist_dumb', 'bdist_wininst']
+ if os.name == 'nt':
+ names.append('bdist_msi')
+
+ for name in names:
+ subcmd = cmd.get_finalized_command(name)
+ self.assertTrue(subcmd.skip_build,
+ '%s should take --skip-build from bdist' % name)
def test_show_formats(self):
__, stdout = captured_stdout(show_formats)
diff --git a/Lib/packaging/tests/test_command_bdist_dumb.py b/Lib/packaging/tests/test_command_bdist_dumb.py
--- a/Lib/packaging/tests/test_command_bdist_dumb.py
+++ b/Lib/packaging/tests/test_command_bdist_dumb.py
@@ -35,7 +35,7 @@
dist = Distribution({'name': 'foo', 'version': '0.1',
'py_modules': ['foo'],
- 'url': 'xxx', 'author': 'xxx',
+ 'home-page': 'xxx', 'author': 'xxx',
'author_email': 'xxx'})
os.chdir(pkg_dir)
cmd = bdist_dumb(dist)
diff --git a/Lib/packaging/tests/test_command_register.py b/Lib/packaging/tests/test_command_register.py
--- a/Lib/packaging/tests/test_command_register.py
+++ b/Lib/packaging/tests/test_command_register.py
@@ -99,7 +99,7 @@
def _get_cmd(self, metadata=None):
if metadata is None:
- metadata = {'url': 'xxx', 'author': 'xxx',
+ metadata = {'home-page': 'xxx', 'author': 'xxx',
'author_email': 'xxx',
'name': 'xxx', 'version': 'xxx'}
pkg_info, dist = self.create_dist(**metadata)
diff --git a/Lib/packaging/tests/test_command_sdist.py b/Lib/packaging/tests/test_command_sdist.py
--- a/Lib/packaging/tests/test_command_sdist.py
+++ b/Lib/packaging/tests/test_command_sdist.py
@@ -72,7 +72,7 @@
"""Returns a cmd"""
if metadata is None:
metadata = {'name': 'fake', 'version': '1.0',
- 'url': 'xxx', 'author': 'xxx',
+ 'home_page': 'xxx', 'author': 'xxx',
'author_email': 'xxx'}
dist = Distribution(metadata)
dist.packages = ['somecode']
diff --git a/Lib/packaging/tests/test_dist.py b/Lib/packaging/tests/test_dist.py
--- a/Lib/packaging/tests/test_dist.py
+++ b/Lib/packaging/tests/test_dist.py
@@ -98,7 +98,7 @@
Distribution(attrs={'author': 'xxx',
'name': 'xxx',
'version': '1.2',
- 'url': 'xxxx',
+ 'home-page': 'xxxx',
'badoptname': 'xxx'})
logs = self.get_logs(logging.WARNING)
self.assertEqual(1, len(logs))
@@ -108,7 +108,7 @@
Distribution(attrs={'author': 'xxx',
'name': 'xxx',
'version': 'xxx',
- 'url': 'xxxx'})
+ 'home-page': 'xxxx'})
logs = self.get_logs(logging.WARNING)
self.assertEqual(1, len(logs))
self.assertIn('not a valid version', logs[0])
@@ -119,7 +119,7 @@
Distribution(attrs={'author': 'xxx',
'name': 'xxx',
'version': '1.2',
- 'url': 'xxxx',
+ 'home-page': 'xxxx',
'options': {}})
self.assertEqual([], self.get_logs(logging.WARNING))
@@ -135,7 +135,7 @@
dist = Distribution(attrs={'author': 'xxx',
'name': 'xxx',
'version': 'xxx',
- 'url': 'xxxx',
+ 'home-page': 'xxxx',
'options': {'sdist': {'owner': 'root'}}})
self.assertIn('owner', dist.get_option_dict('sdist'))
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -268,6 +268,10 @@
Library
-------
+- Issue #10946: The distutils commands bdist_dumb, bdist_wininst and bdist_msi
+ now respect a --skip-build option given to bdist. The packaging commands
+ were fixed too.
+
- Issue #12847: Fix a crash with negative PUT and LONG_BINPUT arguments in
the C pickle implementation.
--
Repository URL: http://hg.python.org/cpython
1
0
cpython: Remove obsolete mentions of the compress program and .Z archives.
by eric.araujo 30 Aug '11
by eric.araujo 30 Aug '11
30 Aug '11
http://hg.python.org/cpython/rev/390cae58f55b
changeset: 72130:390cae58f55b
user: Éric Araujo <merwok(a)netwok.org>
date: Tue Aug 30 01:19:02 2011 +0200
summary:
Remove obsolete mentions of the compress program and .Z archives.
Packaging uses the shutil.make_archive function copied from distutils,
which does not support compress. There is no test to check that
“bdist --format whatever” works, so this slipped by.
files:
Doc/packaging/builtdist.rst | 11 ++----
Doc/packaging/sourcedist.rst | 9 +----
Lib/packaging/command/bdist.py | 13 +++----
Lib/packaging/command/bdist_dumb.py | 15 ++++----
Lib/packaging/tests/test_command_bdist.py | 19 ++++------
5 files changed, 27 insertions(+), 40 deletions(-)
diff --git a/Doc/packaging/builtdist.rst b/Doc/packaging/builtdist.rst
--- a/Doc/packaging/builtdist.rst
+++ b/Doc/packaging/builtdist.rst
@@ -75,9 +75,6 @@
| ``gztar`` | gzipped tar file | (1),(3) |
| | (:file:`.tar.gz`) | |
+-------------+------------------------------+---------+
-| ``ztar`` | compressed tar file | \(3) |
-| | (:file:`.tar.Z`) | |
-+-------------+------------------------------+---------+
| ``tar`` | tar file (:file:`.tar`) | \(3) |
+-------------+------------------------------+---------+
| ``zip`` | zip file (:file:`.zip`) | (2),(4) |
@@ -98,8 +95,8 @@
default on Windows
(3)
- requires external utilities: :program:`tar` and possibly one of :program:`gzip`,
- :program:`bzip2`, or :program:`compress`
+ requires external utilities: :program:`tar` and possibly one of :program:`gzip`
+ or :program:`bzip2`
(4)
requires either external :program:`zip` utility or :mod:`zipfile` module (part
@@ -109,14 +106,14 @@
option; you can also use the command that directly implements the format you're
interested in. Some of these :command:`bdist` "sub-commands" actually generate
several similar formats; for instance, the :command:`bdist_dumb` command
-generates all the "dumb" archive formats (``tar``, ``ztar``, ``gztar``, and
+generates all the "dumb" archive formats (``tar``, ``gztar``, and
``zip``). The :command:`bdist` sub-commands, and the formats generated by
each, are:
+--------------------------+-----------------------+
| Command | Formats |
+==========================+=======================+
-| :command:`bdist_dumb` | tar, ztar, gztar, zip |
+| :command:`bdist_dumb` | tar, gztar, zip |
+--------------------------+-----------------------+
| :command:`bdist_wininst` | wininst |
+--------------------------+-----------------------+
diff --git a/Doc/packaging/sourcedist.rst b/Doc/packaging/sourcedist.rst
--- a/Doc/packaging/sourcedist.rst
+++ b/Doc/packaging/sourcedist.rst
@@ -32,9 +32,6 @@
| ``bztar`` | bzip2'ed tar file | |
| | (:file:`.tar.bz2`) | |
+-----------+-------------------------+---------+
-| ``ztar`` | compressed tar file | \(4) |
-| | (:file:`.tar.Z`) | |
-+-----------+-------------------------+---------+
| ``tar`` | tar file (:file:`.tar`) | |
+-----------+-------------------------+---------+
@@ -50,11 +47,7 @@
requires either external :program:`zip` utility or :mod:`zipfile` module (part
of the standard Python library since Python 1.6)
-(4)
- requires the :program:`compress` program. Notice that this format is now
- pending for deprecation and will be removed in the future versions of Python.
-
-When using any ``tar`` format (``gztar``, ``bztar``, ``ztar`` or
+When using any ``tar`` format (``gztar``, ``bztar`` or
``tar``) under Unix, you can specify the ``owner`` and ``group`` names
that will be set for each member of the archive.
diff --git a/Lib/packaging/command/bdist.py b/Lib/packaging/command/bdist.py
--- a/Lib/packaging/command/bdist.py
+++ b/Lib/packaging/command/bdist.py
@@ -64,20 +64,18 @@
'os2': 'zip'}
# Establish the preferred order (for the --help-formats option).
- format_commands = ['gztar', 'bztar', 'ztar', 'tar',
+ format_commands = ['gztar', 'bztar', 'tar',
'wininst', 'zip', 'msi']
# And the real information.
format_command = {'gztar': ('bdist_dumb', "gzip'ed tar file"),
'bztar': ('bdist_dumb', "bzip2'ed tar file"),
- 'ztar': ('bdist_dumb', "compressed tar file"),
'tar': ('bdist_dumb', "tar file"),
'wininst': ('bdist_wininst',
"Windows executable installer"),
'zip': ('bdist_dumb', "ZIP file"),
- 'msi': ('bdist_msi', "Microsoft Installer")
- }
-
+ 'msi': ('bdist_msi', "Microsoft Installer"),
+ }
def initialize_options(self):
self.bdist_base = None
@@ -109,8 +107,9 @@
try:
self.formats = [self.default_format[os.name]]
except KeyError:
- raise PackagingPlatformError("don't know how to create built distributions " + \
- "on platform %s" % os.name)
+ raise PackagingPlatformError(
+ "don't know how to create built distributions "
+ "on platform %s" % os.name)
if self.dist_dir is None:
self.dist_dir = "dist"
diff --git a/Lib/packaging/command/bdist_dumb.py b/Lib/packaging/command/bdist_dumb.py
--- a/Lib/packaging/command/bdist_dumb.py
+++ b/Lib/packaging/command/bdist_dumb.py
@@ -13,6 +13,7 @@
from packaging.errors import PackagingPlatformError
from packaging import logger
+
class bdist_dumb(Command):
description = 'create a "dumb" built distribution'
@@ -23,7 +24,7 @@
"platform name to embed in generated filenames "
"(default: %s)" % get_platform()),
('format=', 'f',
- "archive format to create (tar, ztar, gztar, zip)"),
+ "archive format to create (tar, gztar, zip)"),
('keep-temp', 'k',
"keep the pseudo-installation tree around after " +
"creating the distribution archive"),
@@ -44,10 +45,9 @@
boolean_options = ['keep-temp', 'skip-build', 'relative']
- default_format = { 'posix': 'gztar',
- 'nt': 'zip',
- 'os2': 'zip' }
-
+ default_format = {'posix': 'gztar',
+ 'nt': 'zip',
+ 'os2': 'zip'}
def initialize_options(self):
self.bdist_dir = None
@@ -69,8 +69,9 @@
try:
self.format = self.default_format[os.name]
except KeyError:
- raise PackagingPlatformError(("don't know how to create dumb built distributions " +
- "on platform %s") % os.name)
+ raise PackagingPlatformError(
+ "don't know how to create dumb built distributions "
+ "on platform %s" % os.name)
self.set_undefined_options('bdist', 'dist_dir', 'plat_name')
diff --git a/Lib/packaging/tests/test_command_bdist.py b/Lib/packaging/tests/test_command_bdist.py
--- a/Lib/packaging/tests/test_command_bdist.py
+++ b/Lib/packaging/tests/test_command_bdist.py
@@ -27,33 +27,30 @@
util.get_platform = self._get_platform
def test_formats(self):
-
# let's create a command and make sure
- # we can fix the format
- pkg_pth, dist = self.create_dist()
+ # we can set the format
+ dist = self.create_dist()[1]
cmd = bdist(dist)
cmd.formats = ['msi']
cmd.ensure_finalized()
self.assertEqual(cmd.formats, ['msi'])
- # what format bdist offers ?
- # XXX an explicit list in bdist is
- # not the best way to bdist_* commands
- # we should add a registry
- formats = sorted(('zip', 'gztar', 'bztar', 'ztar',
- 'tar', 'wininst', 'msi'))
+ # what format does bdist offer?
+ # XXX hard-coded lists are not the best way to find available bdist_*
+ # commands; we should add a registry
+ formats = ['bztar', 'gztar', 'msi', 'tar', 'wininst', 'zip']
found = sorted(cmd.format_command)
self.assertEqual(found, formats)
def test_skip_build(self):
- pkg_pth, dist = self.create_dist()
+ dist = self.create_dist()[1]
cmd = bdist(dist)
cmd.skip_build = False
cmd.formats = ['ztar']
cmd.ensure_finalized()
self.assertFalse(self._get_platform_called)
- pkg_pth, dist = self.create_dist()
+ dist = self.create_dist()[1]
cmd = bdist(dist)
cmd.skip_build = True
cmd.formats = ['ztar']
--
Repository URL: http://hg.python.org/cpython
1
0
cpython: Make bdist_* commands respect --skip-build passed to bdist (#10946).
by eric.araujo 30 Aug '11
by eric.araujo 30 Aug '11
30 Aug '11
http://hg.python.org/cpython/rev/afb12c6b79ba
changeset: 72131:afb12c6b79ba
user: Éric Araujo <merwok(a)netwok.org>
date: Tue Aug 30 01:42:50 2011 +0200
summary:
Make bdist_* commands respect --skip-build passed to bdist (#10946).
There was already a test for this, but it was complicated and had a
subtle bug (custom command objects need to be put in dist.command_obj so
that other command objects may see them) that rendered it moot.
files:
Lib/packaging/command/bdist_dumb.py | 5 +-
Lib/packaging/command/bdist_msi.py | 6 +-
Lib/packaging/command/bdist_wininst.py | 6 +-
Lib/packaging/tests/test_command_bdist.py | 42 +++-------
Misc/NEWS | 3 +-
5 files changed, 28 insertions(+), 34 deletions(-)
diff --git a/Lib/packaging/command/bdist_dumb.py b/Lib/packaging/command/bdist_dumb.py
--- a/Lib/packaging/command/bdist_dumb.py
+++ b/Lib/packaging/command/bdist_dumb.py
@@ -55,7 +55,7 @@
self.format = None
self.keep_temp = False
self.dist_dir = None
- self.skip_build = False
+ self.skip_build = None
self.relative = False
self.owner = None
self.group = None
@@ -73,7 +73,8 @@
"don't know how to create dumb built distributions "
"on platform %s" % os.name)
- self.set_undefined_options('bdist', 'dist_dir', 'plat_name')
+ self.set_undefined_options('bdist',
+ 'dist_dir', 'plat_name', 'skip_build')
def run(self):
if not self.skip_build:
diff --git a/Lib/packaging/command/bdist_msi.py b/Lib/packaging/command/bdist_msi.py
--- a/Lib/packaging/command/bdist_msi.py
+++ b/Lib/packaging/command/bdist_msi.py
@@ -139,18 +139,22 @@
self.no_target_optimize = False
self.target_version = None
self.dist_dir = None
- self.skip_build = False
+ self.skip_build = None
self.install_script = None
self.pre_install_script = None
self.versions = None
def finalize_options(self):
+ self.set_undefined_options('bdist', 'skip_build')
+
if self.bdist_dir is None:
bdist_base = self.get_finalized_command('bdist').bdist_base
self.bdist_dir = os.path.join(bdist_base, 'msi')
+
short_version = get_python_version()
if (not self.target_version) and self.distribution.has_ext_modules():
self.target_version = short_version
+
if self.target_version:
self.versions = [self.target_version]
if not self.skip_build and self.distribution.has_ext_modules()\
diff --git a/Lib/packaging/command/bdist_wininst.py b/Lib/packaging/command/bdist_wininst.py
--- a/Lib/packaging/command/bdist_wininst.py
+++ b/Lib/packaging/command/bdist_wininst.py
@@ -67,13 +67,15 @@
self.dist_dir = None
self.bitmap = None
self.title = None
- self.skip_build = False
+ self.skip_build = None
self.install_script = None
self.pre_install_script = None
self.user_access_control = None
def finalize_options(self):
+ self.set_undefined_options('bdist', 'skip_build')
+
if self.bdist_dir is None:
if self.skip_build and self.plat_name:
# If build is skipped and plat_name is overridden, bdist will
@@ -83,8 +85,10 @@
# next the command will be initialized using that name
bdist_base = self.get_finalized_command('bdist').bdist_base
self.bdist_dir = os.path.join(bdist_base, 'wininst')
+
if not self.target_version:
self.target_version = ""
+
if not self.skip_build and self.distribution.has_ext_modules():
short_version = get_python_version()
if self.target_version and self.target_version != short_version:
diff --git a/Lib/packaging/tests/test_command_bdist.py b/Lib/packaging/tests/test_command_bdist.py
--- a/Lib/packaging/tests/test_command_bdist.py
+++ b/Lib/packaging/tests/test_command_bdist.py
@@ -1,8 +1,6 @@
"""Tests for distutils.command.bdist."""
-
-from packaging import util
+import os
from packaging.command.bdist import bdist, show_formats
-
from packaging.tests import unittest, support, captured_stdout
@@ -10,22 +8,6 @@
support.LoggingCatcher,
unittest.TestCase):
- def _mock_get_platform(self):
- self._get_platform_called = True
- return self._get_platform()
-
- def setUp(self):
- super(BuildTestCase, self).setUp()
-
- # mock util.get_platform
- self._get_platform_called = False
- self._get_platform = util.get_platform
- util.get_platform = self._mock_get_platform
-
- def tearDown(self):
- super(BuildTestCase, self).tearDown()
- util.get_platform = self._get_platform
-
def test_formats(self):
# let's create a command and make sure
# we can set the format
@@ -35,7 +17,7 @@
cmd.ensure_finalized()
self.assertEqual(cmd.formats, ['msi'])
- # what format does bdist offer?
+ # what formats does bdist offer?
# XXX hard-coded lists are not the best way to find available bdist_*
# commands; we should add a registry
formats = ['bztar', 'gztar', 'msi', 'tar', 'wininst', 'zip']
@@ -43,19 +25,21 @@
self.assertEqual(found, formats)
def test_skip_build(self):
- dist = self.create_dist()[1]
- cmd = bdist(dist)
- cmd.skip_build = False
- cmd.formats = ['ztar']
- cmd.ensure_finalized()
- self.assertFalse(self._get_platform_called)
-
+ # bug #10946: bdist --skip-build should trickle down to subcommands
dist = self.create_dist()[1]
cmd = bdist(dist)
cmd.skip_build = True
- cmd.formats = ['ztar']
cmd.ensure_finalized()
- self.assertTrue(self._get_platform_called)
+ dist.command_obj['bdist'] = cmd
+
+ names = ['bdist_dumb', 'bdist_wininst']
+ if os.name == 'nt':
+ names.append('bdist_msi')
+
+ for name in names:
+ subcmd = cmd.get_finalized_command(name)
+ self.assertTrue(subcmd.skip_build,
+ '%s should take --skip-build from bdist' % name)
def test_show_formats(self):
__, stdout = captured_stdout(show_formats)
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -269,7 +269,8 @@
-------
- Issue #10946: The distutils commands bdist_dumb, bdist_wininst and bdist_msi
- now respect a --skip-build option given to bdist.
+ now respect a --skip-build option given to bdist. The packaging commands
+ were fixed too.
- Issue #12287: Fix a stack corruption in ossaudiodev module when the FD is
greater than FD_SETSIZE.
--
Repository URL: http://hg.python.org/cpython
1
0
http://hg.python.org/cpython/rev/2f69b4f3df2e
changeset: 72129:2f69b4f3df2e
parent: 72127:af0bcccb935b
parent: 72128:326a7e44bb66
user: Éric Araujo <merwok(a)netwok.org>
date: Tue Aug 30 01:01:45 2011 +0200
summary:
Merge fix for #10946 from 3.2
files:
Lib/distutils/command/bdist_dumb.py | 5 +-
Lib/distutils/command/bdist_msi.py | 6 +-
Lib/distutils/command/bdist_wininst.py | 6 +-
Lib/distutils/tests/test_bdist.py | 48 +++++++------
Misc/NEWS | 3 +
5 files changed, 43 insertions(+), 25 deletions(-)
diff --git a/Lib/distutils/command/bdist_dumb.py b/Lib/distutils/command/bdist_dumb.py
--- a/Lib/distutils/command/bdist_dumb.py
+++ b/Lib/distutils/command/bdist_dumb.py
@@ -47,7 +47,7 @@
self.format = None
self.keep_temp = 0
self.dist_dir = None
- self.skip_build = 0
+ self.skip_build = None
self.relative = 0
def finalize_options(self):
@@ -65,7 +65,8 @@
self.set_undefined_options('bdist',
('dist_dir', 'dist_dir'),
- ('plat_name', 'plat_name'))
+ ('plat_name', 'plat_name'),
+ ('skip_build', 'skip_build'))
def run(self):
if not self.skip_build:
diff --git a/Lib/distutils/command/bdist_msi.py b/Lib/distutils/command/bdist_msi.py
--- a/Lib/distutils/command/bdist_msi.py
+++ b/Lib/distutils/command/bdist_msi.py
@@ -130,18 +130,22 @@
self.no_target_optimize = 0
self.target_version = None
self.dist_dir = None
- self.skip_build = 0
+ self.skip_build = None
self.install_script = None
self.pre_install_script = None
self.versions = None
def finalize_options(self):
+ self.set_undefined_options('bdist', ('skip_build', 'skip_build'))
+
if self.bdist_dir is None:
bdist_base = self.get_finalized_command('bdist').bdist_base
self.bdist_dir = os.path.join(bdist_base, 'msi')
+
short_version = get_python_version()
if (not self.target_version) and self.distribution.has_ext_modules():
self.target_version = short_version
+
if self.target_version:
self.versions = [self.target_version]
if not self.skip_build and self.distribution.has_ext_modules()\
diff --git a/Lib/distutils/command/bdist_wininst.py b/Lib/distutils/command/bdist_wininst.py
--- a/Lib/distutils/command/bdist_wininst.py
+++ b/Lib/distutils/command/bdist_wininst.py
@@ -65,13 +65,15 @@
self.dist_dir = None
self.bitmap = None
self.title = None
- self.skip_build = 0
+ self.skip_build = None
self.install_script = None
self.pre_install_script = None
self.user_access_control = None
def finalize_options(self):
+ self.set_undefined_options('bdist', ('skip_build', 'skip_build'))
+
if self.bdist_dir is None:
if self.skip_build and self.plat_name:
# If build is skipped and plat_name is overridden, bdist will
@@ -81,8 +83,10 @@
# next the command will be initialized using that name
bdist_base = self.get_finalized_command('bdist').bdist_base
self.bdist_dir = os.path.join(bdist_base, 'wininst')
+
if not self.target_version:
self.target_version = ""
+
if not self.skip_build and self.distribution.has_ext_modules():
short_version = get_python_version()
if self.target_version and self.target_version != short_version:
diff --git a/Lib/distutils/tests/test_bdist.py b/Lib/distutils/tests/test_bdist.py
--- a/Lib/distutils/tests/test_bdist.py
+++ b/Lib/distutils/tests/test_bdist.py
@@ -1,41 +1,47 @@
"""Tests for distutils.command.bdist."""
+import os
import unittest
-import sys
-import os
-import tempfile
-import shutil
from test.support import run_unittest
-from distutils.core import Distribution
from distutils.command.bdist import bdist
from distutils.tests import support
-from distutils.spawn import find_executable
-from distutils import spawn
-from distutils.errors import DistutilsExecError
+
class BuildTestCase(support.TempdirManager,
unittest.TestCase):
def test_formats(self):
-
# let's create a command and make sure
- # we can fix the format
- pkg_pth, dist = self.create_dist()
+ # we can set the format
+ dist = self.create_dist()[1]
cmd = bdist(dist)
cmd.formats = ['msi']
cmd.ensure_finalized()
self.assertEqual(cmd.formats, ['msi'])
- # what format bdist offers ?
- # XXX an explicit list in bdist is
- # not the best way to bdist_* commands
- # we should add a registry
- formats = ['rpm', 'zip', 'gztar', 'bztar', 'ztar',
- 'tar', 'wininst', 'msi']
- formats.sort()
- founded = list(cmd.format_command.keys())
- founded.sort()
- self.assertEqual(founded, formats)
+ # what formats does bdist offer?
+ formats = ['bztar', 'gztar', 'msi', 'rpm', 'tar',
+ 'wininst', 'zip', 'ztar']
+ found = sorted(cmd.format_command)
+ self.assertEqual(found, formats)
+
+ def test_skip_build(self):
+ # bug #10946: bdist --skip-build should trickle down to subcommands
+ dist = self.create_dist()[1]
+ cmd = bdist(dist)
+ cmd.skip_build = 1
+ cmd.ensure_finalized()
+ dist.command_obj['bdist'] = cmd
+
+ names = ['bdist_dumb', 'bdist_wininst'] # bdist_rpm does not support --skip-build
+ if os.name == 'nt':
+ names.append('bdist_msi')
+
+ for name in names:
+ subcmd = cmd.get_finalized_command(name)
+ self.assertTrue(subcmd.skip_build,
+ '%s should take --skip-build from bdist' % name)
+
def test_suite():
return unittest.makeSuite(BuildTestCase)
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -268,6 +268,9 @@
Library
-------
+- Issue #10946: The distutils commands bdist_dumb, bdist_wininst and bdist_msi
+ now respect a --skip-build option given to bdist.
+
- Issue #12287: Fix a stack corruption in ossaudiodev module when the FD is
greater than FD_SETSIZE.
--
Repository URL: http://hg.python.org/cpython
1
0
cpython: Remove display options (--name, etc.) from the Distribution class.
by eric.araujo 30 Aug '11
by eric.araujo 30 Aug '11
30 Aug '11
http://hg.python.org/cpython/rev/af0bcccb935b
changeset: 72127:af0bcccb935b
user: Éric Araujo <merwok(a)netwok.org>
date: Tue Aug 30 00:55:02 2011 +0200
summary:
Remove display options (--name, etc.) from the Distribution class.
These options were used to implement “setup.py --name”,
“setup.py --version”, etc. which are now handled by the pysetup metadata
action or direct parsing of the setup.cfg file.
As a side effect, the Distribution class no longer accepts a 'url' key
in its *attrs* argument: it has to be 'home-page' to be recognized as a
valid metadata field and passed down to the dist.metadata object.
I cleaned up some comments, docstrings and code along the way.
files:
Lib/packaging/dist.py | 106 ++-------
Lib/packaging/tests/test_command_bdist_dumb.py | 2 +-
Lib/packaging/tests/test_command_register.py | 2 +-
Lib/packaging/tests/test_command_sdist.py | 2 +-
Lib/packaging/tests/test_dist.py | 8 +-
5 files changed, 34 insertions(+), 86 deletions(-)
diff --git a/Lib/packaging/dist.py b/Lib/packaging/dist.py
--- a/Lib/packaging/dist.py
+++ b/Lib/packaging/dist.py
@@ -1,20 +1,21 @@
-"""Class representing the distribution being built/installed/etc."""
+"""Class representing the project being built/installed/etc."""
import os
import re
+from packaging import logger
+from packaging.util import strtobool, resolve_name
+from packaging.config import Config
from packaging.errors import (PackagingOptionError, PackagingArgError,
PackagingModuleError, PackagingClassError)
+from packaging.command import get_command_class, STANDARD_COMMANDS
+from packaging.command.cmd import Command
+from packaging.metadata import Metadata
from packaging.fancy_getopt import FancyGetopt
-from packaging.util import strtobool, resolve_name
-from packaging import logger
-from packaging.metadata import Metadata
-from packaging.config import Config
-from packaging.command import get_command_class, STANDARD_COMMANDS
# Regex to define acceptable Packaging command names. This is not *quite*
-# the same as a Python NAME -- I don't allow leading underscores. The fact
-# that they're very similar is no coincidence; the default naming scheme is
+# the same as a Python name -- leading underscores are not allowed. The fact
+# that they're very similar is no coincidence: the default naming scheme is
# to look for a Python module named after the command.
command_re = re.compile(r'^[a-zA-Z]([a-zA-Z0-9_]*)$')
@@ -32,22 +33,16 @@
class Distribution:
- """The core of the Packaging. Most of the work hiding behind 'setup'
- is really done within a Distribution instance, which farms the work out
- to the Packaging commands specified on the command line.
+ """Class used to represent a project and work with it.
- Setup scripts will almost never instantiate Distribution directly,
- unless the 'setup()' function is totally inadequate to their needs.
- However, it is conceivable that a setup script might wish to subclass
- Distribution for some specialized purpose, and then pass the subclass
- to 'setup()' as the 'distclass' keyword argument. If so, it is
- necessary to respect the expectations that 'setup' has of Distribution.
- See the code for 'setup()', in run.py, for details.
+ Most of the work hiding behind 'pysetup run' is really done within a
+ Distribution instance, which farms the work out to the commands
+ specified on the command line.
"""
# 'global_options' describes the command-line options that may be
# supplied to the setup script prior to any actual commands.
- # Eg. "pysetup -n" or "pysetup --dry-run" both take advantage of
+ # Eg. "pysetup run -n" or "pysetup run --dry-run" both take advantage of
# these global options. This list should be kept to a bare minimum,
# since every global option is also valid as a command option -- and we
# don't want to pollute the commands with too many options that they
@@ -63,55 +58,14 @@
common_usage = """\
Common commands: (see '--help-commands' for more)
- pysetup run build will build the package underneath 'build/'
- pysetup run install will install the package
+ pysetup run build will build the project underneath 'build/'
+ pysetup run install will install the project
"""
# options that are not propagated to the commands
display_options = [
('help-commands', None,
"list all available commands"),
- # XXX this is obsoleted by the pysetup metadata action
- ('name', None,
- "print package name"),
- ('version', 'V',
- "print package version"),
- ('fullname', None,
- "print <package name>-<version>"),
- ('author', None,
- "print the author's name"),
- ('author-email', None,
- "print the author's email address"),
- ('maintainer', None,
- "print the maintainer's name"),
- ('maintainer-email', None,
- "print the maintainer's email address"),
- ('contact', None,
- "print the maintainer's name if known, else the author's"),
- ('contact-email', None,
- "print the maintainer's email address if known, else the author's"),
- ('url', None,
- "print the URL for this package"),
- ('license', None,
- "print the license of the package"),
- ('licence', None,
- "alias for --license"),
- ('description', None,
- "print the package description"),
- ('long-description', None,
- "print the long package description"),
- ('platforms', None,
- "print the list of platforms"),
- ('classifier', None,
- "print the list of classifiers"),
- ('keywords', None,
- "print the list of keywords"),
- ('provides', None,
- "print the list of packages/modules provided"),
- ('requires', None,
- "print the list of packages/modules required"),
- ('obsoletes', None,
- "print the list of packages/modules made obsolete"),
('use-2to3', None,
"use 2to3 to make source python 3.x compatible"),
('convert-2to3-doctests', None,
@@ -347,7 +301,6 @@
self.commands = []
parser = FancyGetopt(toplevel_options + self.display_options)
parser.set_negative_aliases(self.negative_opt)
- parser.set_aliases({'licence': 'license'})
args = parser.getopt(args=self.script_args, object=self)
option_order = parser.get_option_order()
@@ -372,7 +325,7 @@
commands=self.commands)
return
- return 1
+ return True
def _get_toplevel_options(self):
"""Return the non-display options recognized at the top level.
@@ -496,13 +449,10 @@
If 'global_options' is true, lists the global options:
--dry-run, etc. If 'display_options' is true, lists
- the "display-only" options: --name, --version, etc. Finally,
+ the "display-only" options: --help-commands. Finally,
lists per-command help for every command name or command class
in 'commands'.
"""
- # late import because of mutual dependence between these modules
- from packaging.command.cmd import Command
-
if global_options:
if display_options:
options = self._get_toplevel_options()
@@ -536,9 +486,8 @@
def handle_display_options(self, option_order):
"""If there were any non-global "display-only" options
- (--help-commands or the metadata display options) on the command
- line, display the requested info and return true; else return
- false.
+ (--help-commands) on the command line, display the requested info and
+ return true; else return false.
"""
# User just wants a list of commands -- we'll print it out and stop
# processing now (ie. if they ran "setup --help-commands foo bar",
@@ -547,7 +496,7 @@
self.print_commands()
print()
print(gen_usage(self.script_name))
- return 1
+ return True
# If user supplied any of the "display metadata" options, then
# display that metadata in the order in which the user supplied the
@@ -628,18 +577,17 @@
"""
cmd_obj = self.command_obj.get(command)
if not cmd_obj and create:
- logger.debug("Distribution.get_command_obj(): " \
+ logger.debug("Distribution.get_command_obj(): "
"creating %r command object", command)
cls = get_command_class(command)
cmd_obj = self.command_obj[command] = cls(self)
self.have_run[command] = 0
- # Set any options that were supplied in config files
- # or on the command line. (NB. support for error
- # reporting is lame here: any errors aren't reported
- # until 'finalize_options()' is called, which means
- # we won't report the source of the error.)
+ # Set any options that were supplied in config files or on the
+ # command line. (XXX support for error reporting is suboptimal
+ # here: errors aren't reported until finalize_options is called,
+ # which means we won't report the source of the error.)
options = self.command_options.get(command)
if options:
self._set_command_options(cmd_obj, options)
@@ -707,7 +655,6 @@
Returns the reinitialized command object.
"""
- from packaging.command.cmd import Command
if not isinstance(command, Command):
command_name = command
command = self.get_command_obj(command_name)
@@ -716,6 +663,7 @@
if not command.finalized:
return command
+
command.initialize_options()
self.have_run[command_name] = 0
command.finalized = False
diff --git a/Lib/packaging/tests/test_command_bdist_dumb.py b/Lib/packaging/tests/test_command_bdist_dumb.py
--- a/Lib/packaging/tests/test_command_bdist_dumb.py
+++ b/Lib/packaging/tests/test_command_bdist_dumb.py
@@ -35,7 +35,7 @@
dist = Distribution({'name': 'foo', 'version': '0.1',
'py_modules': ['foo'],
- 'url': 'xxx', 'author': 'xxx',
+ 'home-page': 'xxx', 'author': 'xxx',
'author_email': 'xxx'})
os.chdir(pkg_dir)
cmd = bdist_dumb(dist)
diff --git a/Lib/packaging/tests/test_command_register.py b/Lib/packaging/tests/test_command_register.py
--- a/Lib/packaging/tests/test_command_register.py
+++ b/Lib/packaging/tests/test_command_register.py
@@ -99,7 +99,7 @@
def _get_cmd(self, metadata=None):
if metadata is None:
- metadata = {'url': 'xxx', 'author': 'xxx',
+ metadata = {'home-page': 'xxx', 'author': 'xxx',
'author_email': 'xxx',
'name': 'xxx', 'version': 'xxx'}
pkg_info, dist = self.create_dist(**metadata)
diff --git a/Lib/packaging/tests/test_command_sdist.py b/Lib/packaging/tests/test_command_sdist.py
--- a/Lib/packaging/tests/test_command_sdist.py
+++ b/Lib/packaging/tests/test_command_sdist.py
@@ -72,7 +72,7 @@
"""Returns a cmd"""
if metadata is None:
metadata = {'name': 'fake', 'version': '1.0',
- 'url': 'xxx', 'author': 'xxx',
+ 'home_page': 'xxx', 'author': 'xxx',
'author_email': 'xxx'}
dist = Distribution(metadata)
dist.packages = ['somecode']
diff --git a/Lib/packaging/tests/test_dist.py b/Lib/packaging/tests/test_dist.py
--- a/Lib/packaging/tests/test_dist.py
+++ b/Lib/packaging/tests/test_dist.py
@@ -98,7 +98,7 @@
Distribution(attrs={'author': 'xxx',
'name': 'xxx',
'version': '1.2',
- 'url': 'xxxx',
+ 'home-page': 'xxxx',
'badoptname': 'xxx'})
logs = self.get_logs(logging.WARNING)
self.assertEqual(1, len(logs))
@@ -108,7 +108,7 @@
Distribution(attrs={'author': 'xxx',
'name': 'xxx',
'version': 'xxx',
- 'url': 'xxxx'})
+ 'home-page': 'xxxx'})
logs = self.get_logs(logging.WARNING)
self.assertEqual(1, len(logs))
self.assertIn('not a valid version', logs[0])
@@ -119,7 +119,7 @@
Distribution(attrs={'author': 'xxx',
'name': 'xxx',
'version': '1.2',
- 'url': 'xxxx',
+ 'home-page': 'xxxx',
'options': {}})
self.assertEqual([], self.get_logs(logging.WARNING))
@@ -135,7 +135,7 @@
dist = Distribution(attrs={'author': 'xxx',
'name': 'xxx',
'version': 'xxx',
- 'url': 'xxxx',
+ 'home-page': 'xxxx',
'options': {'sdist': {'owner': 'root'}}})
self.assertIn('owner', dist.get_option_dict('sdist'))
--
Repository URL: http://hg.python.org/cpython
1
0
cpython (3.2): Make bdist_* commands respect --skip-build passed to bdist (#10946)
by eric.araujo 30 Aug '11
by eric.araujo 30 Aug '11
30 Aug '11
http://hg.python.org/cpython/rev/326a7e44bb66
changeset: 72128:326a7e44bb66
branch: 3.2
parent: 72115:852ca32eb18d
user: Éric Araujo <merwok(a)netwok.org>
date: Mon Aug 29 21:48:39 2011 +0200
summary:
Make bdist_* commands respect --skip-build passed to bdist (#10946)
files:
Lib/distutils/command/bdist_dumb.py | 5 +-
Lib/distutils/command/bdist_msi.py | 6 +-
Lib/distutils/command/bdist_wininst.py | 6 +-
Lib/distutils/tests/test_bdist.py | 48 +++++++------
Misc/NEWS | 3 +
5 files changed, 43 insertions(+), 25 deletions(-)
diff --git a/Lib/distutils/command/bdist_dumb.py b/Lib/distutils/command/bdist_dumb.py
--- a/Lib/distutils/command/bdist_dumb.py
+++ b/Lib/distutils/command/bdist_dumb.py
@@ -47,7 +47,7 @@
self.format = None
self.keep_temp = 0
self.dist_dir = None
- self.skip_build = 0
+ self.skip_build = None
self.relative = 0
def finalize_options(self):
@@ -65,7 +65,8 @@
self.set_undefined_options('bdist',
('dist_dir', 'dist_dir'),
- ('plat_name', 'plat_name'))
+ ('plat_name', 'plat_name'),
+ ('skip_build', 'skip_build'))
def run(self):
if not self.skip_build:
diff --git a/Lib/distutils/command/bdist_msi.py b/Lib/distutils/command/bdist_msi.py
--- a/Lib/distutils/command/bdist_msi.py
+++ b/Lib/distutils/command/bdist_msi.py
@@ -130,18 +130,22 @@
self.no_target_optimize = 0
self.target_version = None
self.dist_dir = None
- self.skip_build = 0
+ self.skip_build = None
self.install_script = None
self.pre_install_script = None
self.versions = None
def finalize_options(self):
+ self.set_undefined_options('bdist', ('skip_build', 'skip_build'))
+
if self.bdist_dir is None:
bdist_base = self.get_finalized_command('bdist').bdist_base
self.bdist_dir = os.path.join(bdist_base, 'msi')
+
short_version = get_python_version()
if (not self.target_version) and self.distribution.has_ext_modules():
self.target_version = short_version
+
if self.target_version:
self.versions = [self.target_version]
if not self.skip_build and self.distribution.has_ext_modules()\
diff --git a/Lib/distutils/command/bdist_wininst.py b/Lib/distutils/command/bdist_wininst.py
--- a/Lib/distutils/command/bdist_wininst.py
+++ b/Lib/distutils/command/bdist_wininst.py
@@ -65,13 +65,15 @@
self.dist_dir = None
self.bitmap = None
self.title = None
- self.skip_build = 0
+ self.skip_build = None
self.install_script = None
self.pre_install_script = None
self.user_access_control = None
def finalize_options(self):
+ self.set_undefined_options('bdist', ('skip_build', 'skip_build'))
+
if self.bdist_dir is None:
if self.skip_build and self.plat_name:
# If build is skipped and plat_name is overridden, bdist will
@@ -81,8 +83,10 @@
# next the command will be initialized using that name
bdist_base = self.get_finalized_command('bdist').bdist_base
self.bdist_dir = os.path.join(bdist_base, 'wininst')
+
if not self.target_version:
self.target_version = ""
+
if not self.skip_build and self.distribution.has_ext_modules():
short_version = get_python_version()
if self.target_version and self.target_version != short_version:
diff --git a/Lib/distutils/tests/test_bdist.py b/Lib/distutils/tests/test_bdist.py
--- a/Lib/distutils/tests/test_bdist.py
+++ b/Lib/distutils/tests/test_bdist.py
@@ -1,41 +1,47 @@
"""Tests for distutils.command.bdist."""
+import os
import unittest
-import sys
-import os
-import tempfile
-import shutil
from test.support import run_unittest
-from distutils.core import Distribution
from distutils.command.bdist import bdist
from distutils.tests import support
-from distutils.spawn import find_executable
-from distutils import spawn
-from distutils.errors import DistutilsExecError
+
class BuildTestCase(support.TempdirManager,
unittest.TestCase):
def test_formats(self):
-
# let's create a command and make sure
- # we can fix the format
- pkg_pth, dist = self.create_dist()
+ # we can set the format
+ dist = self.create_dist()[1]
cmd = bdist(dist)
cmd.formats = ['msi']
cmd.ensure_finalized()
self.assertEqual(cmd.formats, ['msi'])
- # what format bdist offers ?
- # XXX an explicit list in bdist is
- # not the best way to bdist_* commands
- # we should add a registry
- formats = ['rpm', 'zip', 'gztar', 'bztar', 'ztar',
- 'tar', 'wininst', 'msi']
- formats.sort()
- founded = list(cmd.format_command.keys())
- founded.sort()
- self.assertEqual(founded, formats)
+ # what formats does bdist offer?
+ formats = ['bztar', 'gztar', 'msi', 'rpm', 'tar',
+ 'wininst', 'zip', 'ztar']
+ found = sorted(cmd.format_command)
+ self.assertEqual(found, formats)
+
+ def test_skip_build(self):
+ # bug #10946: bdist --skip-build should trickle down to subcommands
+ dist = self.create_dist()[1]
+ cmd = bdist(dist)
+ cmd.skip_build = 1
+ cmd.ensure_finalized()
+ dist.command_obj['bdist'] = cmd
+
+ names = ['bdist_dumb', 'bdist_wininst'] # bdist_rpm does not support --skip-build
+ if os.name == 'nt':
+ names.append('bdist_msi')
+
+ for name in names:
+ subcmd = cmd.get_finalized_command(name)
+ self.assertTrue(subcmd.skip_build,
+ '%s should take --skip-build from bdist' % name)
+
def test_suite():
return unittest.makeSuite(BuildTestCase)
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -22,6 +22,9 @@
Library
-------
+- Issue #10946: The distutils commands bdist_dumb, bdist_wininst and bdist_msi
+ now respect a --skip-build option given to bdist.
+
- Issue #12287: Fix a stack corruption in ossaudiodev module when the FD is
greater than FD_SETSIZE.
--
Repository URL: http://hg.python.org/cpython
1
0
http://hg.python.org/cpython/rev/e4576486544c
changeset: 72126:e4576486544c
user: Éric Araujo <merwok(a)netwok.org>
date: Tue Aug 30 00:45:59 2011 +0200
summary:
Cleanup: move code out of a try block
files:
Lib/packaging/command/__init__.py | 10 ++++++----
1 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/Lib/packaging/command/__init__.py b/Lib/packaging/command/__init__.py
--- a/Lib/packaging/command/__init__.py
+++ b/Lib/packaging/command/__init__.py
@@ -30,6 +30,8 @@
'upload': 'packaging.command.upload.upload',
'upload_docs': 'packaging.command.upload_docs.upload_docs'}
+# XXX use OrderedDict to preserve the grouping (build-related, install-related,
+# distribution-related)
STANDARD_COMMANDS = set(_COMMANDS)
@@ -48,9 +50,9 @@
"""Return the registered command"""
try:
cls = _COMMANDS[name]
- if isinstance(cls, str):
- cls = resolve_name(cls)
- _COMMANDS[name] = cls
- return cls
except KeyError:
raise PackagingModuleError("Invalid command %s" % name)
+ if isinstance(cls, str):
+ cls = resolve_name(cls)
+ _COMMANDS[name] = cls
+ return cls
--
Repository URL: http://hg.python.org/cpython
1
0