Commit ac73c538 by Sébastien Eustace

Improve dependency resolution speed

parent 6223d061
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
### Changed ### Changed
- Improved dependency resolution to avoid unnecessary operations. - Improved dependency resolution to avoid unnecessary operations.
- Improved dependency resolution speed.
## [0.6.5] - 2018-03-22 ## [0.6.5] - 2018-03-22
......
...@@ -43,6 +43,7 @@ class DebugResolveCommand(Command): ...@@ -43,6 +43,7 @@ class DebugResolveCommand(Command):
self.poetry.package, self.poetry.package,
self.poetry.pool, self.poetry.pool,
Repository(), Repository(),
Repository(),
self.output self.output
) )
......
...@@ -16,7 +16,6 @@ from .dependency_graph import DependencyGraph ...@@ -16,7 +16,6 @@ from .dependency_graph import DependencyGraph
from .helpers import flat_map from .helpers import flat_map
from .possibility_set import PossibilitySet from .possibility_set import PossibilitySet
from .state import DependencyState from .state import DependencyState
from .state import ResolutionState
from .unwind_details import UnwindDetails from .unwind_details import UnwindDetails
from .utils import unique from .utils import unique
......
...@@ -33,6 +33,8 @@ class Provider(SpecificationProvider): ...@@ -33,6 +33,8 @@ class Provider(SpecificationProvider):
self._package = package self._package = package
self._pool = pool self._pool = pool
self._python_constraint = package.python_constraint self._python_constraint = package.python_constraint
self._base_dg = DependencyGraph()
self._search_for = {}
@property @property
def pool(self) -> Pool: def pool(self) -> Pool:
...@@ -59,6 +61,9 @@ class Provider(SpecificationProvider): ...@@ -59,6 +61,9 @@ class Provider(SpecificationProvider):
The specifications in the returned list will be considered in reverse The specifications in the returned list will be considered in reverse
order, so the latest version ought to be last. order, so the latest version ought to be last.
""" """
if dependency in self._search_for:
return self._search_for[dependency]
if dependency.is_vcs(): if dependency.is_vcs():
return self.search_for_vcs(dependency) return self.search_for_vcs(dependency)
...@@ -76,7 +81,9 @@ class Provider(SpecificationProvider): ...@@ -76,7 +81,9 @@ class Provider(SpecificationProvider):
) )
) )
return packages self._search_for[dependency] = packages
return self._search_for[dependency]
def search_for_vcs(self, dependency: VCSDependency) -> List[Package]: def search_for_vcs(self, dependency: VCSDependency) -> List[Package]:
""" """
...@@ -190,6 +197,7 @@ class Provider(SpecificationProvider): ...@@ -190,6 +197,7 @@ class Provider(SpecificationProvider):
conflicts: Dict[str, List[Conflict]]): conflicts: Dict[str, List[Conflict]]):
return sorted(dependencies, key=lambda d: [ return sorted(dependencies, key=lambda d: [
0 if activated.vertex_named(d.name).payload else 1, 0 if activated.vertex_named(d.name).payload else 1,
0 if activated.vertex_named(d.name).root else 1,
0 if d.allows_prereleases() else 1, 0 if d.allows_prereleases() else 1,
0 if d.name in conflicts else 1, 0 if d.name in conflicts else 1,
0 if activated.vertex_named(d.name).payload else len(self.search_for(d)) 0 if activated.vertex_named(d.name).payload else len(self.search_for(d))
......
from cleo.styles import CleoStyle from cleo.styles import CleoStyle
from cleo.helpers import ProgressIndicator
from poetry.mixology.contracts import UI as BaseUI from poetry.mixology.contracts import UI as BaseUI
......
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