Commit e8b6e15e by Sébastien Eustace Committed by GitHub

Fix PEP 508 url dependency handling (#1620)

parent 863e2714
......@@ -25,6 +25,8 @@ from .vcs_dependency import VCSDependency
def dependency_from_pep_508(name):
from poetry.vcs.git import ParsedUrl
# Removing comments
parts = name.split("#", 1)
name = parts[0].strip()
......@@ -46,6 +48,8 @@ def dependency_from_pep_508(name):
if is_url(name):
link = Link(name)
elif req.url:
link = Link(req.url)
else:
p, extras = strip_extras(path)
if os.path.isdir(p) and (os.path.sep in name or name.startswith(".")):
......@@ -74,10 +78,15 @@ def dependency_from_pep_508(name):
version = m.group("ver")
dep = Dependency(name, version)
else:
name = link.egg_fragment
name = req.name or link.egg_fragment
if link.scheme == "git":
if link.scheme.startswith("git+"):
url = ParsedUrl.parse(link.url)
dep = VCSDependency(name, "git", url.url, rev=url.rev)
elif link.scheme == "git":
dep = VCSDependency(name, "git", link.url_without_fragment)
elif link.scheme in ["http", "https"]:
dep = URLDependency(name, link.url_without_fragment)
else:
dep = Dependency(name, "*")
else:
......
......@@ -78,16 +78,19 @@ class ParsedUrl:
raise ValueError('Invalid git url "{}"'.format(url))
def format(self):
@property
def url(self): # type: () -> str
return "{}{}{}{}{}".format(
"{}://".format(self.protocol) if self.protocol else "",
"{}@".format(self.user) if self.user else "",
self.resource,
":{}".format(self.port) if self.port else "",
"/" + self.pathname if self.pathname.startswith(":") else self.pathname,
"#{}".format(self.rev) if self.rev else "",
)
def format(self):
return "{}".format(self.url, "#{}".format(self.rev) if self.rev else "",)
def __str__(self): # type: () -> str
return self.format()
......
......@@ -28,7 +28,7 @@ from .markers import parse_marker
try:
import urllib.parse as urlparse
except ImportError:
from urlparse import urlparse
import urlparse
LEGACY_REGEX = r"""
......
......@@ -169,3 +169,25 @@ def test_dependency_from_pep_508_with_not_in_op_marker():
assert (
str(dep.marker) == 'python_version not in "3.0,3.1,3.2" and extra == "export"'
)
def test_dependency_from_pep_508_with_git_url():
name = "django-utils @ git+ssh://git@corp-gitlab.com/corp-utils.git@1.2"
dep = dependency_from_pep_508(name)
assert "django-utils" == dep.name
assert dep.is_vcs()
assert "git" == dep.vcs
assert "ssh://git@corp-gitlab.com/corp-utils.git" == dep.source
assert "1.2" == dep.reference
def test_dependency_from_pep_508_with_url():
name = "django-utils @ https://example.com/django-utils-1.0.0.tar.gz"
dep = dependency_from_pep_508(name)
assert "django-utils" == dep.name
assert dep.is_url()
assert "https://example.com/django-utils-1.0.0.tar.gz" == dep.url
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment