Skip to content

Commit 2bc4d9e

Browse files
authored
solver: make results of poetry lock --regenerate and poetry lock more consistent (#10305)
1 parent 9ad6e1d commit 2bc4d9e

File tree

1 file changed

+17
-12
lines changed

1 file changed

+17
-12
lines changed

src/poetry/mixology/version_solver.py

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -488,28 +488,34 @@ def _get_comp_key(self, dependency: Dependency) -> CompKey:
488488
https://github.com/python-poetry/poetry/pull/8255#issuecomment-1657198242
489489
for more details).
490490
"""
491+
preference = Preference.DEFAULT
492+
491493
# Direct origin dependencies must be handled first: we don't want to resolve
492494
# a regular dependency for some package only to find later that we had a
493495
# direct-origin dependency.
494496
if dependency.is_direct_origin():
495-
return Preference.DIRECT_ORIGIN, 0, False, 0
497+
preference = Preference.DIRECT_ORIGIN
496498

499+
packages: list[DependencyPackage] = []
497500
use_latest = dependency.name in self._provider.use_latest
498501
if not use_latest:
499502
locked = self._provider.get_locked(dependency)
500503
if locked:
501-
return Preference.LOCKED, 0, False, 0
504+
if preference == Preference.DEFAULT:
505+
preference = Preference.LOCKED
506+
packages = [locked]
502507

503-
packages = self._dependency_cache.search_for(
504-
dependency, self._solution.decision_level
505-
)
508+
if not packages:
509+
packages = self._dependency_cache.search_for(
510+
dependency, self._solution.decision_level
511+
)
506512
num_packages = len(packages)
507513
if packages:
508514
package = packages[0].package
509515
if package.is_root():
510516
relevant_dependencies = package.all_requires
511517
else:
512-
if not package.is_direct_origin():
518+
if preference != Preference.LOCKED and not package.is_direct_origin():
513519
# We have to get the package from the pool,
514520
# otherwise `requires` will be empty.
515521
#
@@ -542,12 +548,11 @@ def _get_comp_key(self, dependency: Dependency) -> CompKey:
542548
has_deps = False
543549
num_deps_upper_bound = 0
544550

545-
if num_packages < 2:
546-
preference = Preference.NO_CHOICE
547-
elif use_latest:
548-
preference = Preference.USE_LATEST
549-
else:
550-
preference = Preference.DEFAULT
551+
if preference == Preference.DEFAULT:
552+
if num_packages < 2:
553+
preference = Preference.NO_CHOICE
554+
elif use_latest:
555+
preference = Preference.USE_LATEST
551556
return preference, -num_deps_upper_bound, not has_deps, -num_packages
552557

553558
def _choose_next(self, unsatisfied: list[Dependency]) -> Dependency:

0 commit comments

Comments
 (0)