Commit b8faa51a by Randy Döring

solver: print warning if yanked release is chosen

parent f0e55b0a
...@@ -83,6 +83,16 @@ class Solver: ...@@ -83,6 +83,16 @@ class Solver:
f" {', '.join(f'({b})' for b in self._overrides)}" f" {', '.join(f'({b})' for b in self._overrides)}"
) )
for p in packages:
if p.yanked:
message = (
f"The locked version {p.pretty_version} for {p.pretty_name} is a"
" yanked version."
)
if p.yanked_reason:
message += f" Reason for being yanked: {p.yanked_reason}"
self._io.write_error_line(f"<warning>Warning: {message}</warning>")
return Transaction( return Transaction(
self._locked_packages, self._locked_packages,
list(zip(packages, depths)), list(zip(packages, depths)),
......
...@@ -6,6 +6,7 @@ from typing import Any ...@@ -6,6 +6,7 @@ from typing import Any
import pytest import pytest
from cleo.io.buffered_io import BufferedIO
from cleo.io.null_io import NullIO from cleo.io.null_io import NullIO
from poetry.core.packages.dependency import Dependency from poetry.core.packages.dependency import Dependency
from poetry.core.packages.package import Package from poetry.core.packages.package import Package
...@@ -3680,3 +3681,44 @@ def test_update_with_prerelease_and_no_solution( ...@@ -3680,3 +3681,44 @@ def test_update_with_prerelease_and_no_solution(
with pytest.raises(SolverProblemError): with pytest.raises(SolverProblemError):
solver.solve() solver.solve()
def test_solver_yanked_warning(
package: ProjectPackage,
installed: InstalledRepository,
locked: Repository,
pool: Pool,
repo: Repository,
) -> None:
package.add_dependency(Factory.create_dependency("foo", "==1"))
package.add_dependency(Factory.create_dependency("bar", "==2"))
package.add_dependency(Factory.create_dependency("baz", "==3"))
foo = get_package("foo", "1", yanked=False)
bar = get_package("bar", "2", yanked=True)
baz = get_package("baz", "3", yanked="just wrong")
repo.add_package(foo)
repo.add_package(bar)
repo.add_package(baz)
io = BufferedIO(decorated=False)
solver = Solver(package, pool, installed.packages, locked.packages, io)
transaction = solver.solve()
check_solver_result(
transaction,
[
{"job": "install", "package": bar},
{"job": "install", "package": baz},
{"job": "install", "package": foo},
],
)
error = io.fetch_error()
assert "foo" not in error
assert "The locked version 2 for bar is a yanked version." in error
assert (
"The locked version 3 for baz is a yanked version. Reason for being yanked:"
" just wrong"
in error
)
assert error.count("is a yanked version") == 2
assert error.count("Reason for being yanked") == 1
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