Skip to content

Commit 869b700

Browse files
radoeringabn
authored andcommitted
perf: avoid unnecessary overrides
1 parent 73f4195 commit 869b700

File tree

1 file changed

+28
-15
lines changed

1 file changed

+28
-15
lines changed

src/poetry/puzzle/provider.py

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -626,6 +626,27 @@ def complete_package(
626626
dependencies.append(deps[0])
627627
continue
628628

629+
# Sort out irrelevant requirements
630+
overrides_marker_intersection: BaseMarker = AnyMarker()
631+
for dep_overrides in self._overrides.values():
632+
for dep in dep_overrides.values():
633+
overrides_marker_intersection = (
634+
overrides_marker_intersection.intersect(dep.marker)
635+
)
636+
deps = [
637+
dep
638+
for dep in deps
639+
if not overrides_marker_intersection.intersect(dep.marker).is_empty()
640+
]
641+
if len(deps) < 2:
642+
if not deps or (len(deps) == 1 and deps[0].constraint.is_empty()):
643+
msg = f"<debug>No relevant requirements for {dep_name}</debug>"
644+
else:
645+
msg = f"<debug>Only one relevant requirement for {dep_name}</debug>"
646+
dependencies.append(deps[0])
647+
self.debug(msg)
648+
continue
649+
629650
# At this point, we raise an exception that will
630651
# tell the solver to make new resolutions with specific overrides.
631652
#
@@ -652,22 +673,14 @@ def fmt_warning(d: Dependency) -> str:
652673
)
653674

654675
overrides = []
655-
overrides_marker_intersection: BaseMarker = AnyMarker()
656-
for dep_overrides in self._overrides.values():
657-
for dep in dep_overrides.values():
658-
overrides_marker_intersection = (
659-
overrides_marker_intersection.intersect(dep.marker)
660-
)
661676
for dep in deps:
662-
if not overrides_marker_intersection.intersect(dep.marker).is_empty():
663-
current_overrides = self._overrides.copy()
664-
package_overrides = current_overrides.get(package, {}).copy()
665-
package_overrides.update({dep.name: dep})
666-
current_overrides.update({package: package_overrides})
667-
overrides.append(current_overrides)
668-
669-
if overrides:
670-
raise OverrideNeededError(*overrides)
677+
current_overrides = self._overrides.copy()
678+
package_overrides = current_overrides.get(package, {}).copy()
679+
package_overrides.update({dep.name: dep})
680+
current_overrides.update({package: package_overrides})
681+
overrides.append(current_overrides)
682+
683+
raise OverrideNeededError(*overrides)
671684

672685
# Modifying dependencies as needed
673686
clean_dependencies = []

0 commit comments

Comments
 (0)