Commit 1adf3919 by Sébastien Eustace

Fix reading of extras in lock file

parent a1048974
......@@ -92,7 +92,7 @@ class Locker(object):
package.extras[name] = []
for dep in deps:
m = re.match(r"^(.+)(?=\s+\((.+)\))?$", dep)
m = re.match(r"^(.+?)(?:\s+\((.+)\))?$", dep)
dep_name = m.group(1)
constraint = m.group(2) or "*"
......
......@@ -1341,3 +1341,35 @@ def test_installer_required_extras_should_not_be_removed_when_updating_single_de
assert len(installer.installer.installs) == 6 if not PY2 else 7
assert len(installer.installer.updates) == 0
assert len(installer.installer.removals) == 0
def test_installer_required_extras_should_be_installed(
locker, repo, package, installed, env, mocker
):
pool = Pool()
pool.add_repository(MockRepository())
installer = Installer(NullIO(), env, package, locker, pool, installed=installed)
package.add_dependency(
"cachecontrol", {"version": "^0.12.5", "extras": ["filecache"]}
)
installer.update(True)
installer.run()
assert len(installer.installer.installs) == 2
assert len(installer.installer.updates) == 0
assert len(installer.installer.removals) == 0
locker.locked(True)
locker.mock_lock_data(locker.written_data)
installer = Installer(NullIO(), env, package, locker, pool, installed=installed)
installer.update(True)
installer.run()
assert len(installer.installer.installs) == 2
assert len(installer.installer.updates) == 0
assert len(installer.installer.removals) == 0
import pytest
import tempfile
import tomlkit
from poetry.packages.locker import Locker
from poetry.packages.project_package import ProjectPackage
......@@ -61,3 +63,47 @@ B = []
"""
assert expected == content
def test_locker_properly_loads_extras(locker):
content = """\
[[package]]
category = "main"
description = "httplib2 caching for requests"
name = "cachecontrol"
optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
version = "0.12.5"
[package.dependencies]
msgpack = "*"
requests = "*"
[package.dependencies.lockfile]
optional = true
version = ">=0.9"
[package.extras]
filecache = ["lockfile (>=0.9)"]
redis = ["redis (>=2.10.5)"]
[metadata]
content-hash = "c3d07fca33fba542ef2b2a4d75bf5b48d892d21a830e2ad9c952ba5123a52f77"
python-versions = "~2.7 || ^3.4"
[metadata.hashes]
cachecontrol = []
"""
locker.lock.write(tomlkit.parse(content))
packages = locker.locked_repository().packages
assert 1 == len(packages)
package = packages[0]
assert 3 == len(package.requires)
assert 2 == len(package.extras)
lockfile_dep = package.extras["filecache"][0]
assert lockfile_dep.name == "lockfile"
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