Do not attempt setup.py clean for failed pep517 builds (#7477)

This commit is contained in:
Pradyun Gedam 2020-01-02 12:11:32 +00:00 committed by GitHub
commit 08f61a9b73
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 25 additions and 2 deletions

2
news/6642.bugfix Normal file
View File

@ -0,0 +1,2 @@
Do not attempt to run ``setup.py clean`` after a ``pep517`` build error,
since a ``setup.py`` may not exist in that case.

View File

@ -231,11 +231,12 @@ def _build_one_inside_env(
req.name, e,
)
# Ignore return, we can't do anything else useful.
_clean_one(req, global_options)
if not req.use_pep517:
_clean_one_legacy(req, global_options)
return None
def _clean_one(req, global_options):
def _clean_one_legacy(req, global_options):
# type: (InstallRequirement, List[str]) -> bool
clean_args = make_setuptools_clean_args(
req.setup_py_path,

View File

@ -8,6 +8,9 @@ from setuptools.build_meta import (get_requires_for_build_sdist,
def build_wheel(*a, **kw):
if os.environ.get("PIP_TEST_FAIL_BUILD_WHEEL"):
raise RuntimeError("Failing build_wheel, as requested.")
# Create the marker file to record that the hook was called
with open(os.environ['PIP_TEST_MARKER_FILE'], 'wb'):
pass

View File

@ -1256,6 +1256,7 @@ def test_cleanup_after_failed_wheel(script, with_wheel):
shebang = open(script_py, 'r').readline().strip()
assert shebang != '#!python', shebang
# OK, assert that we *said* we were cleaning up:
# /!\ if in need to change this, also change test_pep517_no_legacy_cleanup
assert "Running setup.py clean for wheelbrokenafter" in str(res), str(res)

View File

@ -136,3 +136,19 @@ def test_cleanup_prevented_upon_build_dir_exception(script, data):
assert result.returncode == PREVIOUS_BUILD_DIR_ERROR, str(result)
assert "pip can't proceed" in result.stderr, str(result)
assert exists(build_simple), str(result)
@pytest.mark.network
def test_pep517_no_legacy_cleanup(script, data, with_wheel):
"""Test a PEP 517 failed build does not attempt a legacy cleanup"""
to_install = data.packages.joinpath('pep517_wrapper_buildsys')
script.environ["PIP_TEST_FAIL_BUILD_WHEEL"] = "1"
res = script.pip(
'install', '-f', data.find_links, to_install,
expect_error=True
)
# Must not have built the package
expected = "Failed building wheel for pep517-wrapper-buildsys"
assert expected in str(res)
# Must not have attempted legacy cleanup
assert "setup.py clean" not in str(res)