Skip to content

Commit

Permalink
provider: consider explicit source when searching for a locked packag…
Browse files Browse the repository at this point in the history
…e with a source reference in the repository pool
  • Loading branch information
radoering committed Feb 5, 2024
1 parent 4433307 commit 0f60f53
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 2 deletions.
4 changes: 3 additions & 1 deletion src/poetry/puzzle/provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -491,7 +491,9 @@ def complete_package(
package.pretty_name,
package.version,
extras=list(dependency.extras),
repository_name=dependency.source_name,
repository_name=(
dependency.source_name or package.source_reference
),
),
)
except PackageNotFound as e:
Expand Down
19 changes: 19 additions & 0 deletions tests/puzzle/test_provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
from poetry.puzzle.provider import IncompatibleConstraintsError
from poetry.puzzle.provider import Provider
from poetry.repositories.repository import Repository
from poetry.repositories.repository_pool import Priority
from poetry.repositories.repository_pool import RepositoryPool
from poetry.utils.env import EnvCommandError
from poetry.utils.env import MockEnv as BaseMockEnv
Expand Down Expand Up @@ -783,6 +784,24 @@ def test_complete_package_fetches_optional_vcs_dependency_only_if_requested(
spy.assert_not_called()


def test_complete_package_finds_locked_package_in_explicit_source(
pool: RepositoryPool, provider: Provider
) -> None:
package = Package("a", "1.0", source_reference="explicit")
explicit_repo = Repository("explicit")
explicit_repo.add_package(package)
pool.add_repository(explicit_repo, priority=Priority.EXPLICIT)

dependency = package.to_dependency()
# complete_package() must succeed even if the dependency does not have an explicit
# source. This can be the case if the dependency is a transitive dependency and
# there is a direct dependency with an explicit source.
dependency.source_name = None

# must not fail
provider.complete_package(DependencyPackage(dependency, package))


def test_source_dependency_is_satisfied_by_direct_origin(
provider: Provider, repository: Repository
) -> None:
Expand Down
2 changes: 1 addition & 1 deletion tests/puzzle/test_solver.py
Original file line number Diff line number Diff line change
Expand Up @@ -3826,7 +3826,7 @@ def test_solver_should_not_update_same_version_packages_if_installed_has_no_sour
"1.0.0",
source_type="legacy",
source_url="https://foo.bar",
source_reference="custom",
source_reference="repo",
)
repo.add_package(foo)

Expand Down

0 comments on commit 0f60f53

Please sign in to comment.