Skip to content

Commit b7b1cf5

Browse files
authored
provider: do not iterate over sets for more deterministic results (#10276)
1 parent e49af21 commit b7b1cf5

File tree

2 files changed

+7
-7
lines changed

2 files changed

+7
-7
lines changed

src/poetry/packages/dependency_package.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55

66
if TYPE_CHECKING:
7+
from collections.abc import Iterable
8+
79
from poetry.core.packages.dependency import Dependency
810
from poetry.core.packages.package import Package
911

@@ -24,7 +26,7 @@ def package(self) -> Package:
2426
def clone(self) -> DependencyPackage:
2527
return self.__class__(self._dependency, self._package.clone())
2628

27-
def with_features(self, features: list[str]) -> DependencyPackage:
29+
def with_features(self, features: Iterable[str]) -> DependencyPackage:
2830
return self.__class__(self._dependency, self._package.with_features(features))
2931

3032
def without_features(self) -> DependencyPackage:

src/poetry/puzzle/provider.py

+4-6
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,7 @@ def _search_for_url(self, dependency: URLDependency) -> Package:
366366

367367
self.validate_package_for_dependency(dependency=dependency, package=package)
368368

369-
for extra in dependency.extras:
369+
for extra in sorted(dependency.extras):
370370
if extra in package.extras:
371371
for dep in package.extras[extra]:
372372
dep.activate()
@@ -487,7 +487,7 @@ def complete_package(
487487
if dependency.extras:
488488
# Find all the optional dependencies that are wanted - taking care to allow
489489
# for self-referential extras.
490-
stack = list(dependency.extras)
490+
stack = sorted(dependency.extras)
491491
while stack:
492492
extra = stack.pop()
493493
if extra in found_extras:
@@ -497,16 +497,14 @@ def complete_package(
497497
extra_dependencies = package.extras.get(extra, [])
498498
for extra_dependency in extra_dependencies:
499499
if extra_dependency.name == dependency.name:
500-
stack += list(extra_dependency.extras)
500+
stack += sorted(extra_dependency.extras)
501501
else:
502502
optional_dependencies.add(extra_dependency.name)
503503

504504
# If some extras/features were required, we need to add a special dependency
505505
# representing the base package to the current package.
506506

507-
dependency_package = dependency_package.with_features(
508-
list(dependency.extras)
509-
)
507+
dependency_package = dependency_package.with_features(dependency.extras)
510508
package = dependency_package.package
511509
dependency = dependency_package.dependency
512510
new_dependency = package.without_features().to_dependency()

0 commit comments

Comments
 (0)