Fix return code of “pysetup run COMMAND” (closes #12222)

This commit is contained in:
Éric Araujo 2011-10-06 05:28:56 +02:00
parent 8ed34a130e
commit 6fd287e6c2
2 changed files with 19 additions and 16 deletions

View File

@ -283,10 +283,11 @@ def _run(dispatcher, args, **kw):
dist.parse_config_files() dist.parse_config_files()
for cmd in dispatcher.commands: for cmd in dispatcher.commands:
# FIXME need to catch MetadataMissingError here (from the check command
# e.g.)--or catch any exception, print an error message and exit with 1
dist.run_command(cmd, dispatcher.command_options[cmd]) dist.run_command(cmd, dispatcher.command_options[cmd])
# XXX this is crappy return 0
return dist
@action_help("""\ @action_help("""\

View File

@ -4,12 +4,9 @@ import sys
import logging import logging
import packaging.util import packaging.util
from io import StringIO
from packaging.run import main
from packaging.errors import PackagingError from packaging.errors import PackagingError
from packaging.install import remove from packaging.install import remove
from packaging.database import disable_cache, enable_cache from packaging.database import disable_cache, enable_cache
from packaging.command.install_dist import install_dist
from packaging.tests import unittest, support from packaging.tests import unittest, support
@ -47,16 +44,12 @@ class UninstallTestCase(support.TempdirManager,
packaging.util._path_created.clear() packaging.util._path_created.clear()
super(UninstallTestCase, self).tearDown() super(UninstallTestCase, self).tearDown()
def run_setup(self, *args):
# run setup with args
args = ['run'] + list(args)
dist = main(args)
return dist
def get_path(self, dist, name): def get_path(self, dist, name):
cmd = install_dist(dist) # the dist argument must contain an install_dist command correctly
cmd.prefix = self.root_dir # initialized with a prefix option and finalized befored this method
cmd.finalize_options() # can be called successfully; practically, this means that you should
# call self.install_dist before self.get_path
cmd = dist.get_command_obj('install_dist')
return getattr(cmd, 'install_' + name) return getattr(cmd, 'install_' + name)
def make_dist(self, name='Foo', **kw): def make_dist(self, name='Foo', **kw):
@ -83,8 +76,17 @@ class UninstallTestCase(support.TempdirManager,
if not dirname: if not dirname:
dirname = self.make_dist(name, **kw) dirname = self.make_dist(name, **kw)
os.chdir(dirname) os.chdir(dirname)
sys.stderr = StringIO()
dist = self.run_setup('install_dist', '--prefix=' + self.root_dir) dist = support.TestDistribution()
# for some unfathomable reason, the tests will fail horribly if the
# parse_config_files method is not called, even if it doesn't do
# anything useful; trying to build and use a command object manually
# also fails
dist.parse_config_files()
dist.finalize_options()
dist.run_command('install_dist',
{'prefix': ('command line', self.root_dir)})
site_packages = self.get_path(dist, 'purelib') site_packages = self.get_path(dist, 'purelib')
return dist, site_packages return dist, site_packages