Commit ede3eca4 by Riccardo Albertazzi Committed by GitHub

fix: poetry add --lock does not perform a full update (#7920)

parent c564e1ca
......@@ -254,9 +254,7 @@ The add command adds required packages to your <comment>pyproject.toml</> and in
)
# Refresh the locker
self.poetry.set_locker(
self.poetry.locker.__class__(self.poetry.locker.lock, poetry_content)
)
self.poetry.locker.set_local_config(poetry_content)
self.installer.set_locker(self.poetry.locker)
# Cosmetic new line
......@@ -266,8 +264,7 @@ The add command adds required packages to your <comment>pyproject.toml</> and in
self.installer.dry_run(self.option("dry-run"))
self.installer.verbose(self.io.is_verbose())
self.installer.update(True)
if self.option("lock"):
self.installer.lock()
self.installer.execute_operations(not self.option("lock"))
self.installer.whitelist([r["name"] for r in requirements])
......
......@@ -15,6 +15,7 @@ from poetry.core.packages.package import Package
from poetry.console.commands.installer_command import InstallerCommand
from poetry.puzzle.exceptions import SolverProblemError
from poetry.repositories.legacy_repository import LegacyRepository
from tests.helpers import TestLocker
from tests.helpers import get_dependency
from tests.helpers import get_package
......@@ -1506,3 +1507,36 @@ def test_add_extras_only_accepts_one_package(
str(e.value)
== "You can only specify one package when using the --extras option"
)
@pytest.mark.parametrize("command", ["foo", "foo --lock"])
@pytest.mark.parametrize(
("locked", "expected_docker"), [(True, "4.3.1"), (False, "4.3.2")]
)
def test_add_does_not_update_locked_dependencies(
repo: TestRepository,
poetry_with_up_to_date_lockfile: Poetry,
tester: CommandTester,
command_tester_factory: CommandTesterFactory,
command: str,
locked: bool,
expected_docker: str,
) -> None:
assert isinstance(poetry_with_up_to_date_lockfile.locker, TestLocker)
poetry_with_up_to_date_lockfile.locker.locked(locked)
tester = command_tester_factory("add", poetry=poetry_with_up_to_date_lockfile)
docker_locked = get_package("docker", "4.3.1")
docker_new = get_package("docker", "4.3.2")
docker_dep = get_dependency("docker", ">=4.0.0")
foo = get_package("foo", "0.1.0")
foo.add_dependency(docker_dep)
for package in docker_locked, docker_new, foo:
repo.add_package(package)
tester.execute(command)
lock_data = poetry_with_up_to_date_lockfile.locker.lock_data
docker_locked_after_command = next(
p for p in lock_data["package"] if p["name"] == "docker"
)
assert docker_locked_after_command["version"] == expected_docker
......@@ -6,7 +6,7 @@ authors = ["Poetry Developer <developer@python-poetry.org>"]
[tool.poetry.dependencies]
python = "^3.8"
docker = "4.3.1"
docker = ">=4.3.1"
[tool.poetry.dev-dependencies]
......
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