Repository: pypa/pip

Issue:
pip ignores --global-option and --install-options when installing from a VCS url
**Environment**

* pip version: 10.0.1
* Python version: 3.6.5
* OS: Linux

**Description**
pip 10.0.1 ignores --install-options installing from git+git://

Likely related to

https://github.com/pypa/pip/issues/5251

```
$ pip install --ignore-installed --no-deps --install-option="--prefix=/tmp/test-install" git+git://github.com/bccp/nbodykit

$ ls /tmp/test-install
ls: cannot access '/tmp/test-install': No such file or directory
```

However, installing from zip works:

```
$ pip install --ignore-installed --no-deps --install-option="--prefix=/tmp/test-install" http://github.com/bccp/nbodykit/archive/master.zip

$ ls /tmp/test-install
lib

```

**Expected behavior**
installing from VCS shall be no different than from a zip file.

**How to Reproduce**
See above.

**Output**

See above.


Discussion:

Patch:
diff --git a/news/5518.bugfix b/news/5518.bugfix
new file mode 100644
index 000000000..832098a71
--- /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 1bdbe93ab..18f25df4a 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):


Test patch:
diff --git a/tests/unit/test_wheel.py b/tests/unit/test_wheel.py
index 19a3259ed..14cde104b 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(