From 32c11ee2c322d226c08ade71e6ad455d25dae197 Mon Sep 17 00:00:00 2001 From: Chris Jerdonek Date: Mon, 8 Apr 2019 02:00:18 -0700 Subject: [PATCH] Respect --global-option and --install-option for VCS installs. --- news/5518.bugfix | 2 ++ src/pip/_internal/wheel.py | 8 +++---- tests/unit/test_wheel.py | 43 ++++++++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 news/5518.bugfix diff --git a/news/5518.bugfix b/news/5518.bugfix new file mode 100644 index 00000000000..832098a71e5 --- /dev/null +++ b/news/5518.bugfix @@ -0,0 +1,2 @@ +Respect ``--global-option`` and ``--install-option`` when installing from +a version control url (e.g. ``git``). diff --git a/src/pip/_internal/wheel.py b/src/pip/_internal/wheel.py index 1bdbe93ab7e..18f25df4a42 100644 --- a/src/pip/_internal/wheel.py +++ b/src/pip/_internal/wheel.py @@ -763,10 +763,6 @@ def should_use_ephemeral_cache( if req.editable or not req.source_dir: return None - if req.link and not req.link.is_artifact: - # VCS checkout. Build wheel just for this run. - return True - if "binary" not in format_control.get_allowed_formats( canonicalize_name(req.name)): logger.info( @@ -775,6 +771,10 @@ def should_use_ephemeral_cache( ) return None + if req.link and not req.link.is_artifact: + # VCS checkout. Build wheel just for this run. + return True + link = req.link base, ext = link.splitext() if cache_available and _contains_egg_info(base): diff --git a/tests/unit/test_wheel.py b/tests/unit/test_wheel.py index 19a3259ede4..14cde104b04 100644 --- a/tests/unit/test_wheel.py +++ b/tests/unit/test_wheel.py @@ -99,6 +99,49 @@ def test_should_use_ephemeral_cache__issue_6197( assert ephem_cache is expected +@pytest.mark.parametrize( + "disallow_binaries, expected", + [ + # By default (i.e. when binaries are allowed), VCS requirements + # should be built. + (False, True), + # Disallowing binaries, however, should cause them not to be built. + (True, None), + ], +) +def test_should_use_ephemeral_cache__disallow_binaries_and_vcs_checkout( + disallow_binaries, expected, +): + """ + Test that disallowing binaries (e.g. from passing --global-option) + causes should_use_ephemeral_cache() to return None for VCS checkouts. + """ + req = Requirement('pendulum') + # Passing a VCS url causes link.is_artifact to return False. + link = Link(url='git+https://git.example.com/pendulum.git') + req = InstallRequirement( + req=req, + comes_from=None, + constraint=False, + editable=False, + link=link, + source_dir='/tmp/pip-install-9py5m2z1/pendulum', + ) + assert not req.is_wheel + assert not req.link.is_artifact + + format_control = FormatControl() + if disallow_binaries: + format_control.disallow_binaries() + + # The cache_available value doesn't matter for this test. + ephem_cache = wheel.should_use_ephemeral_cache( + req, format_control=format_control, autobuilding=True, + cache_available=True, + ) + assert ephem_cache is expected + + def test_format_command_result__INFO(caplog): caplog.set_level(logging.INFO) actual = wheel.format_command_result(