Commit 64e8af3b by Phil Jones Committed by Sébastien Eustace

Bugfix cope with arbitrary equals (#620)

When loading installed packages pip freeze can output lines with
``===``, arbitrary equals, qualifiers instead of ``==``. This allows
poetry to parse either.

This fixes #433, based on the suggestion present in the discussion.
parent 48e21915
import re
from poetry.packages import Package from poetry.packages import Package
from poetry.utils.env import Env from poetry.utils.env import Env
...@@ -17,7 +19,7 @@ class InstalledRepository(Repository): ...@@ -17,7 +19,7 @@ class InstalledRepository(Repository):
freeze_output = env.run("pip", "freeze") freeze_output = env.run("pip", "freeze")
for line in freeze_output.split("\n"): for line in freeze_output.split("\n"):
if "==" in line: if "==" in line:
name, version = line.split("==") name, version = re.split("={2,3}", line)
repo.add_package(Package(name, version, version)) repo.add_package(Package(name, version, version))
elif line.startswith("-e "): elif line.startswith("-e "):
line = line[3:].strip() line = line[3:].strip()
......
...@@ -4,6 +4,7 @@ from poetry.utils.env import MockEnv as BaseMockEnv ...@@ -4,6 +4,7 @@ from poetry.utils.env import MockEnv as BaseMockEnv
FREEZE_RESULTS = """cleo==0.6.8 FREEZE_RESULTS = """cleo==0.6.8
-e git+https://github.com/sdispater/pendulum.git@bb058f6b78b2d28ef5d9a5e759cfa179a1a713d6#egg=pendulum -e git+https://github.com/sdispater/pendulum.git@bb058f6b78b2d28ef5d9a5e759cfa179a1a713d6#egg=pendulum
orator===0.9.8
""" """
...@@ -18,7 +19,7 @@ class MockEnv(BaseMockEnv): ...@@ -18,7 +19,7 @@ class MockEnv(BaseMockEnv):
def test_load(): def test_load():
repository = InstalledRepository.load(MockEnv()) repository = InstalledRepository.load(MockEnv())
assert len(repository.packages) == 2 assert len(repository.packages) == 3
cleo = repository.packages[0] cleo = repository.packages[0]
assert cleo.name == "cleo" assert cleo.name == "cleo"
...@@ -30,3 +31,7 @@ def test_load(): ...@@ -30,3 +31,7 @@ def test_load():
assert pendulum.source_type == "git" assert pendulum.source_type == "git"
assert pendulum.source_url == "https://github.com/sdispater/pendulum.git" assert pendulum.source_url == "https://github.com/sdispater/pendulum.git"
assert pendulum.source_reference == "bb058f6b78b2d28ef5d9a5e759cfa179a1a713d6" assert pendulum.source_reference == "bb058f6b78b2d28ef5d9a5e759cfa179a1a713d6"
orator = repository.packages[2]
assert orator.name == "orator"
assert orator.version.text == "0.9.8"
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