Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
python-poetry
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
open
python-poetry
Commits
5b4a3842
Commit
5b4a3842
authored
Aug 20, 2020
by
Josh Guice
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix(solver): skip seen "graph" nodes
sharply decreases slowness :)
parent
d2fd581c
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
22 additions
and
14 deletions
+22
-14
poetry/puzzle/solver.py
+11
-3
tests/puzzle/test_solver.py
+11
-11
No files found.
poetry/puzzle/solver.py
View file @
5b4a3842
...
...
@@ -221,7 +221,9 @@ class Solver:
except
SolveFailure
as
e
:
raise
SolverProblemError
(
e
)
graph
=
self
.
_build_graph
(
self
.
_package
,
packages
)
# TODO why is there a lingering variable state / stack during install when invoked via `poetry update`?
# NOTE passing explicit empty array for seen to reset between invocations during update + install cycle
graph
=
self
.
_build_graph
(
self
.
_package
,
packages
,
seen
=
[])
depths
=
[]
final_packages
=
[]
...
...
@@ -237,7 +239,7 @@ class Solver:
return
final_packages
,
depths
def
_build_graph
(
self
,
package
,
packages
,
previous
=
None
,
previous_dep
=
None
,
dep
=
None
self
,
package
,
packages
,
previous
=
None
,
previous_dep
=
None
,
dep
=
None
,
seen
=
[]
):
# type: (...) -> Dict[str, Any]
if
not
previous
:
category
=
"dev"
...
...
@@ -254,6 +256,12 @@ class Solver:
"children"
:
childrens
,
}
# skip already traversed packages
if
package
in
seen
:
return
graph
else
:
seen
.
append
(
package
)
if
previous_dep
and
previous_dep
is
not
dep
and
previous_dep
.
name
==
dep
.
name
:
return
graph
...
...
@@ -302,7 +310,7 @@ class Solver:
continue
child_graph
=
self
.
_build_graph
(
pkg
,
packages
,
graph
,
dependency
,
dep
or
dependency
pkg
,
packages
,
graph
,
dependency
,
dep
or
dependency
,
seen
=
seen
)
if
not
is_activated
:
...
...
tests/puzzle/test_solver.py
View file @
5b4a3842
...
...
@@ -619,17 +619,17 @@ def test_solver_with_dependency_in_both_main_and_dev_dependencies(
check_solver_result
(
ops
,
[
{
"job"
:
"install"
,
"package"
:
package_d
},
{
"job"
:
"install"
,
"package"
:
package_b
},
{
"job"
:
"install"
,
"package"
:
package_c
},
{
"job"
:
"install"
,
"package"
:
package_a
},
{
"job"
:
"install"
,
"package"
:
package_c
},
{
"job"
:
"install"
,
"package"
:
package_d
},
],
)
b
=
ops
[
1
]
.
package
b
=
ops
[
0
]
.
package
a
=
ops
[
1
]
.
package
c
=
ops
[
2
]
.
package
d
=
ops
[
0
]
.
package
a
=
ops
[
3
]
.
package
d
=
ops
[
3
]
.
package
assert
d
.
category
==
"dev"
assert
c
.
category
==
"dev"
...
...
@@ -670,18 +670,18 @@ def test_solver_with_dependency_in_both_main_and_dev_dependencies_with_one_more_
check_solver_result
(
ops
,
[
{
"job"
:
"install"
,
"package"
:
package_b
},
{
"job"
:
"install"
,
"package"
:
package_d
},
{
"job"
:
"install"
,
"package"
:
package_a
},
{
"job"
:
"install"
,
"package"
:
package_b
},
{
"job"
:
"install"
,
"package"
:
package_c
},
{
"job"
:
"install"
,
"package"
:
package_d
},
{
"job"
:
"install"
,
"package"
:
package_e
},
],
)
b
=
ops
[
0
]
.
package
c
=
ops
[
3
]
.
package
d
=
ops
[
1
]
.
package
a
=
ops
[
2
]
.
package
a
=
ops
[
0
]
.
package
b
=
ops
[
1
]
.
package
c
=
ops
[
2
]
.
package
d
=
ops
[
3
]
.
package
e
=
ops
[
4
]
.
package
assert
d
.
category
==
"dev"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment