Skip to content

Commit

Permalink
Merge pull request #6440 from nicolasbock/index_with_git
Browse files Browse the repository at this point in the history
Protect `@` as safe character when cleaning URLs
  • Loading branch information
cjerdonek authored Apr 25, 2019
2 parents 9861dc7 + 265b4e7 commit 60d3f11
Show file tree
Hide file tree
Showing 3 changed files with 10 additions and 2 deletions.
2 changes: 2 additions & 0 deletions news/6440.bugfix
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Fix a regression that caused `@` to be quoted in pypiserver links.
This interfered with parsing the revision string from VCS urls.
5 changes: 4 additions & 1 deletion src/pip/_internal/index.py
Original file line number Diff line number Diff line change
Expand Up @@ -336,6 +336,7 @@ class FoundCandidates(object):
* `evaluator`: A CandidateEvaluator object to sort applicable candidates
by order of preference.
"""

def __init__(
self,
candidates, # type: List[InstallationCandidate]
Expand Down Expand Up @@ -1061,7 +1062,9 @@ def _clean_link(url):
path = urllib_request.pathname2url(
urllib_request.url2pathname(result.path))
else:
path = urllib_parse.quote(urllib_parse.unquote(result.path))
# In addition to the `/` character we protect `@` so that
# revision strings in VCS URLs are properly parsed.
path = urllib_parse.quote(urllib_parse.unquote(result.path), safe="/@")
return urllib_parse.urlunparse(result._replace(path=path))


Expand Down
5 changes: 4 additions & 1 deletion tests/unit/test_index.py
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,10 @@ def test_request_retries(caplog):
# URL with something that looks like a drive letter, but is
# not. The `:` should be quoted.
("https://localhost.localdomain/T:/path/",
"https://localhost.localdomain/T%3A/path/")
"https://localhost.localdomain/T%3A/path/"),
# VCS URL containing revision string.
("git+ssh://example.com/path to/[email protected]#egg=my-package-1.0",
"git+ssh://example.com/path%20to/[email protected]#egg=my-package-1.0")
]
)
def test_clean_link(url, clean_url):
Expand Down

0 comments on commit 60d3f11

Please sign in to comment.