summaryrefslogtreecommitdiffstats
path: root/Lib/packaging
diff options
context:
space:
mode:
authorÉric Araujo <merwok@netwok.org>2012-02-09 13:29:11 (GMT)
committerÉric Araujo <merwok@netwok.org>2012-02-09 13:29:11 (GMT)
commit5c69b66086e9665b4e9afefa7854cbd966d386e4 (patch)
treed991bf0c9c1a51a971edb2bca1e061259b9f6f74 /Lib/packaging
parent1aa54a417d767efb2ebb4c1a31e69f7be9b1d6ae (diff)
downloadcpython-5c69b66086e9665b4e9afefa7854cbd966d386e4.zip
cpython-5c69b66086e9665b4e9afefa7854cbd966d386e4.tar.gz
cpython-5c69b66086e9665b4e9afefa7854cbd966d386e4.tar.bz2
Group commands by topic in “pysetup run --list-commands” output.
This fixes a regression from distutils, where “setup.py --help-commands” prints out commands grouped by topic (i.e. building vs. installing), which is more useful than using sorted.
Diffstat (limited to 'Lib/packaging')
-rw-r--r--Lib/packaging/command/__init__.py50
-rw-r--r--Lib/packaging/run.py9
-rw-r--r--Lib/packaging/tests/test_run.py17
3 files changed, 40 insertions, 36 deletions
diff --git a/Lib/packaging/command/__init__.py b/Lib/packaging/command/__init__.py
index cd34fc8..87227c0 100644
--- a/Lib/packaging/command/__init__.py
+++ b/Lib/packaging/command/__init__.py
@@ -6,38 +6,28 @@ from packaging.util import resolve_name
__all__ = ['get_command_names', 'set_command', 'get_command_class',
'STANDARD_COMMANDS']
-_COMMANDS = {
- 'check': 'packaging.command.check.check',
- 'test': 'packaging.command.test.test',
- 'build': 'packaging.command.build.build',
- 'build_py': 'packaging.command.build_py.build_py',
- 'build_ext': 'packaging.command.build_ext.build_ext',
- 'build_clib': 'packaging.command.build_clib.build_clib',
- 'build_scripts': 'packaging.command.build_scripts.build_scripts',
- 'clean': 'packaging.command.clean.clean',
- 'install_dist': 'packaging.command.install_dist.install_dist',
- 'install_lib': 'packaging.command.install_lib.install_lib',
- 'install_headers': 'packaging.command.install_headers.install_headers',
- 'install_scripts': 'packaging.command.install_scripts.install_scripts',
- 'install_data': 'packaging.command.install_data.install_data',
- 'install_distinfo':
- 'packaging.command.install_distinfo.install_distinfo',
- 'sdist': 'packaging.command.sdist.sdist',
- 'bdist': 'packaging.command.bdist.bdist',
- 'bdist_dumb': 'packaging.command.bdist_dumb.bdist_dumb',
- 'bdist_wininst': 'packaging.command.bdist_wininst.bdist_wininst',
- 'register': 'packaging.command.register.register',
- 'upload': 'packaging.command.upload.upload',
- 'upload_docs': 'packaging.command.upload_docs.upload_docs',
-}
-
-# XXX this is crappy
+
+STANDARD_COMMANDS = [
+ # packaging
+ 'check', 'test',
+ # building
+ 'build', 'build_py', 'build_ext', 'build_clib', 'build_scripts', 'clean',
+ # installing
+ 'install_dist', 'install_lib', 'install_headers', 'install_scripts',
+ 'install_data', 'install_distinfo',
+ # distributing
+ 'sdist', 'bdist', 'bdist_dumb', 'bdist_wininst',
+ 'register', 'upload', 'upload_docs',
+ ]
+
if os.name == 'nt':
- _COMMANDS['bdist_msi'] = 'packaging.command.bdist_msi.bdist_msi'
+ STANDARD_COMMANDS.insert(STANDARD_COMMANDS.index('bdist_wininst'),
+ 'bdist_msi')
-# XXX use OrderedDict to preserve the grouping (build-related, install-related,
-# distribution-related)
-STANDARD_COMMANDS = set(_COMMANDS)
+# XXX maybe we need more than one registry, so that --list-comands can display
+# standard, custom and overriden standard commands differently
+_COMMANDS = dict((name, 'packaging.command.%s.%s' % (name, name))
+ for name in STANDARD_COMMANDS)
def get_command_names():
diff --git a/Lib/packaging/run.py b/Lib/packaging/run.py
index 4756f7c..c3600a7 100644
--- a/Lib/packaging/run.py
+++ b/Lib/packaging/run.py
@@ -254,16 +254,13 @@ def _run(dispatcher, args, **kw):
parser = dispatcher.parser
args = args[1:]
- commands = STANDARD_COMMANDS # + extra commands
+ commands = STANDARD_COMMANDS # FIXME display extra commands
if args == ['--list-commands']:
print('List of available commands:')
- cmds = sorted(commands)
-
- for cmd in cmds:
+ for cmd in commands:
cls = dispatcher.cmdclass.get(cmd) or get_command_class(cmd)
- desc = getattr(cls, 'description',
- '(no description available)')
+ desc = getattr(cls, 'description', '(no description available)')
print(' %s: %s' % (cmd, desc))
return
diff --git a/Lib/packaging/tests/test_run.py b/Lib/packaging/tests/test_run.py
index 84b9bf6..14e7b07 100644
--- a/Lib/packaging/tests/test_run.py
+++ b/Lib/packaging/tests/test_run.py
@@ -67,6 +67,23 @@ class RunTestCase(support.TempdirManager,
self.assertGreater(out, b'')
self.assertEqual(err, b'')
+ def test_list_commands(self):
+ status, out, err = assert_python_ok('-m', 'packaging.run', 'run',
+ '--list-commands')
+ # check that something is displayed
+ self.assertEqual(status, 0)
+ self.assertGreater(out, b'')
+ self.assertEqual(err, b'')
+
+ # make sure the manual grouping of commands is respected
+ check_position = out.find(b' check: ')
+ build_position = out.find(b' build: ')
+ self.assertTrue(check_position, out) # "out" printed as debugging aid
+ self.assertTrue(build_position, out)
+ self.assertLess(check_position, build_position, out)
+
+ # TODO test that custom commands don't break --list-commands
+
def test_suite():
return unittest.makeSuite(RunTestCase)