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
07565b21
Commit
07565b21
authored
Oct 04, 2021
by
Randy Döring
Committed by
Bjorn Neergaard
Nov 20, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Merge any marker constraints into constraints with specific markers
parent
7aefbd69
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
61 additions
and
3 deletions
+61
-3
src/poetry/puzzle/provider.py
+18
-3
tests/puzzle/test_solver.py
+43
-0
No files found.
src/poetry/puzzle/provider.py
View file @
07565b21
...
@@ -665,6 +665,14 @@ class Provider:
...
@@ -665,6 +665,14 @@ class Provider:
# - ipython (1.2.4) ; implementation_name == "pypy"
# - ipython (1.2.4) ; implementation_name == "pypy"
#
#
# the marker for `ipython` will become `implementation_name != "pypy"`.
# the marker for `ipython` will become `implementation_name != "pypy"`.
#
# Further, we have to merge the constraints of the requirements
# without markers into the constraints of the requirements with markers.
# for instance, if we have the following dependencies:
# - foo (>= 1.2)
# - foo (!= 1.2.1) ; python == 3.10
#
# the constraint for the second entry will become (!= 1.2.1, >= 1.2)
any_markers_dependencies
=
[
d
for
d
in
_deps
if
d
.
marker
.
is_any
()]
any_markers_dependencies
=
[
d
for
d
in
_deps
if
d
.
marker
.
is_any
()]
other_markers_dependencies
=
[
d
for
d
in
_deps
if
not
d
.
marker
.
is_any
()]
other_markers_dependencies
=
[
d
for
d
in
_deps
if
not
d
.
marker
.
is_any
()]
...
@@ -673,9 +681,16 @@ class Provider:
...
@@ -673,9 +681,16 @@ class Provider:
for
other_dep
in
other_markers_dependencies
[
1
:]:
for
other_dep
in
other_markers_dependencies
[
1
:]:
marker
=
marker
.
union
(
other_dep
.
marker
)
marker
=
marker
.
union
(
other_dep
.
marker
)
for
i
,
d
in
enumerate
(
_deps
):
inverted_marker
=
marker
.
invert
()
if
d
.
marker
.
is_any
():
for
dep_any
in
any_markers_dependencies
:
_deps
[
i
]
.
marker
=
marker
.
invert
()
dep_any
.
marker
=
inverted_marker
for
dep_other
in
other_markers_dependencies
:
dep_other
.
set_constraint
(
dep_other
.
constraint
.
intersect
(
dep_any
.
constraint
)
)
# TODO: Setting _pretty_constraint can be removed once the following issue has been fixed
# https://github.com/python-poetry/poetry/issues/4589
dep_other
.
_pretty_constraint
=
str
(
dep_other
.
constraint
)
overrides
=
[]
overrides
=
[]
for
_dep
in
_deps
:
for
_dep
in
_deps
:
...
...
tests/puzzle/test_solver.py
View file @
07565b21
...
@@ -1142,6 +1142,49 @@ So, because no versions of a match !=1.0
...
@@ -1142,6 +1142,49 @@ So, because no versions of a match !=1.0
assert
str
(
e
.
value
)
==
expected
assert
str
(
e
.
value
)
==
expected
def
test_solver_duplicate_dependencies_different_constraints_merge_no_markers
(
solver
,
repo
,
package
):
package
.
add_dependency
(
Factory
.
create_dependency
(
"A"
,
"*"
))
package
.
add_dependency
(
Factory
.
create_dependency
(
"B"
,
"1.0"
))
package_a10
=
get_package
(
"A"
,
"1.0"
)
package_a10
.
add_dependency
(
Factory
.
create_dependency
(
"C"
,
{
"version"
:
"^1.0"
}))
package_a20
=
get_package
(
"A"
,
"2.0"
)
package_a20
.
add_dependency
(
Factory
.
create_dependency
(
"C"
,
{
"version"
:
"^2.0"
})
# incompatible with B
)
package_a20
.
add_dependency
(
Factory
.
create_dependency
(
"C"
,
{
"version"
:
"!=2.1"
,
"python"
:
"3.10"
})
)
package_b
=
get_package
(
"B"
,
"1.0"
)
package_b
.
add_dependency
(
Factory
.
create_dependency
(
"C"
,
{
"version"
:
"<2.0"
}))
package_c10
=
get_package
(
"C"
,
"1.0"
)
package_c20
=
get_package
(
"C"
,
"2.0"
)
package_c21
=
get_package
(
"C"
,
"2.1"
)
repo
.
add_package
(
package_a10
)
repo
.
add_package
(
package_a20
)
repo
.
add_package
(
package_b
)
repo
.
add_package
(
package_c10
)
repo
.
add_package
(
package_c20
)
repo
.
add_package
(
package_c21
)
transaction
=
solver
.
solve
()
check_solver_result
(
transaction
,
[
{
"job"
:
"install"
,
"package"
:
package_c10
},
{
"job"
:
"install"
,
"package"
:
package_a10
},
# only a10, not a20
{
"job"
:
"install"
,
"package"
:
package_b
},
],
)
def
test_solver_duplicate_dependencies_sub_dependencies
(
solver
,
repo
,
package
):
def
test_solver_duplicate_dependencies_sub_dependencies
(
solver
,
repo
,
package
):
package
.
add_dependency
(
Factory
.
create_dependency
(
"A"
,
"*"
))
package
.
add_dependency
(
Factory
.
create_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