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
c471b129
Unverified
Commit
c471b129
authored
Jun 09, 2018
by
Sébastien Eustace
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix handling of duplicate dependencies
parent
65002eae
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
49 additions
and
0 deletions
+49
-0
poetry/puzzle/provider.py
+22
-0
tests/puzzle/test_solver.py
+27
-0
No files found.
poetry/puzzle/provider.py
View file @
c471b129
...
@@ -399,6 +399,28 @@ class Provider:
...
@@ -399,6 +399,28 @@ class Provider:
dependencies
.
append
(
list
(
by_constraint
.
values
())[
0
][
0
])
dependencies
.
append
(
list
(
by_constraint
.
values
())[
0
][
0
])
continue
continue
# We leave dependencies as-is if they have the same
# python/platform constraints.
# That way the resolver will pickup the conflict
# and display a proper error.
_deps
=
[
value
[
0
]
for
value
in
by_constraint
.
values
()]
seen
=
set
()
for
_dep
in
_deps
:
pep_508_dep
=
_dep
.
to_pep_508
()
if
";"
not
in
pep_508_dep
:
_requirements
=
""
else
:
_requirements
=
pep_508_dep
.
split
(
";"
)[
1
]
.
strip
()
if
_requirements
not
in
seen
:
seen
.
add
(
_requirements
)
if
len
(
_deps
)
!=
len
(
seen
):
for
_dep
in
_deps
:
dependencies
.
append
(
_dep
)
continue
# At this point, we raise an exception that will
# At this point, we raise an exception that will
# tell the solver to enter compatibility mode
# tell the solver to enter compatibility mode
# which means it will resolve for each minor
# which means it will resolve for each minor
...
...
tests/puzzle/test_solver.py
View file @
c471b129
...
@@ -819,6 +819,33 @@ def test_solver_duplicate_dependencies_different_constraints(solver, repo, packa
...
@@ -819,6 +819,33 @@ def test_solver_duplicate_dependencies_different_constraints(solver, repo, packa
assert
op
.
package
.
requirements
==
{
"python"
:
">=3.4"
}
assert
op
.
package
.
requirements
==
{
"python"
:
">=3.4"
}
def
test_solver_duplicate_dependencies_different_constraints_same_requirements
(
solver
,
repo
,
package
):
package
.
add_dependency
(
"A"
)
package_a
=
get_package
(
"A"
,
"1.0"
)
package_a
.
add_dependency
(
"B"
,
{
"version"
:
"^1.0"
})
package_a
.
add_dependency
(
"B"
,
{
"version"
:
"^2.0"
})
package_b10
=
get_package
(
"B"
,
"1.0"
)
package_b20
=
get_package
(
"B"
,
"2.0"
)
repo
.
add_package
(
package_a
)
repo
.
add_package
(
package_b10
)
repo
.
add_package
(
package_b20
)
with
pytest
.
raises
(
SolverProblemError
)
as
e
:
solver
.
solve
()
expected
=
"""
\
Because a (1.0) depends on both B (^1.0) and B (^2.0), a is forbidden.
So, because no versions of a match <1.0 || >1.0
and root depends on A (*), version solving failed."""
assert
str
(
e
.
value
)
==
expected
def
test_solver_duplicate_dependencies_sub_dependencies
(
solver
,
repo
,
package
):
def
test_solver_duplicate_dependencies_sub_dependencies
(
solver
,
repo
,
package
):
package
.
add_dependency
(
"A"
)
package
.
add_dependency
(
"A"
)
...
...
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