diff --git a/pip/req/req_install.py b/pip/req/req_install.py index 40c36b4e4..3e5c15f82 100644 --- a/pip/req/req_install.py +++ b/pip/req/req_install.py @@ -132,7 +132,7 @@ class InstallRequirement(object): # it's a local file, dir, or url if link: - url = link.url_without_fragment + url = link.url # Handle relative file URLs if link.scheme == 'file' and re.search(r'\.\./', url): url = path_to_url(os.path.normpath(os.path.abspath(link.path))) diff --git a/tests/unit/test_req.py b/tests/unit/test_req.py index daf1c6643..bd569e975 100644 --- a/tests/unit/test_req.py +++ b/tests/unit/test_req.py @@ -79,7 +79,7 @@ class TestInstallRequirement(object): url = 'http://foo.com/?p=bar.git;a=snapshot;h=v0.1;sf=tgz' fragment = '#egg=bar' req = InstallRequirement.from_line(url + fragment) - assert req.url == url, req.url + assert req.url == url + fragment, req.url def test_unsupported_wheel_requirement_raises(self): with pytest.raises(UnsupportedWheel): @@ -95,6 +95,18 @@ class TestInstallRequirement(object): req = InstallRequirement.from_line('simple-0.1-py2.py3-none-any.whl') assert req.req == pkg_resources.Requirement.parse('simple==0.1') + def test_url_preserved_line_req(self): + """Confirm the url is preserved in a non-editable requirement""" + url = 'http://foo.com@ref#egg=foo' + req = InstallRequirement.from_line(url) + assert req.url == url + + def test_url_preserved_editable_req(self): + """Confirm the url is preserved in a editable requirement""" + url = 'http://foo.com@ref#egg=foo' + req = InstallRequirement.from_editable(url) + assert req.url == url + def test_requirements_data_structure_keeps_order(): requirements = Requirements()