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
77d89758
Commit
77d89758
authored
May 19, 2022
by
Arun Babu Neelicattu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ensure provider respects subdirectory when merging
parent
5cacba89
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
200 additions
and
2 deletions
+200
-2
src/poetry/mixology/version_solver.py
+3
-1
src/poetry/puzzle/provider.py
+2
-1
tests/fixtures/git/github.com/demo/subdirectories/one-copy/pyproject.toml
+9
-0
tests/fixtures/git/github.com/demo/subdirectories/one/pyproject.toml
+9
-0
tests/fixtures/git/github.com/demo/subdirectories/two/pyproject.toml
+9
-0
tests/fixtures/with_conditional_path_deps/demo_one/pyproject.toml
+9
-0
tests/fixtures/with_conditional_path_deps/demo_two/pyproject.toml
+9
-0
tests/fixtures/with_conditional_path_deps/pyproject.toml
+13
-0
tests/mixology/version_solver/test_dependency_cache.py
+62
-0
tests/puzzle/test_provider.py
+75
-0
No files found.
src/poetry/mixology/version_solver.py
View file @
77d89758
...
@@ -43,7 +43,8 @@ class DependencyCache:
...
@@ -43,7 +43,8 @@ class DependencyCache:
def
__init__
(
self
,
provider
:
Provider
)
->
None
:
def
__init__
(
self
,
provider
:
Provider
)
->
None
:
self
.
provider
=
provider
self
.
provider
=
provider
self
.
cache
:
dict
[
self
.
cache
:
dict
[
tuple
[
str
,
str
|
None
,
str
|
None
,
str
|
None
],
list
[
DependencyPackage
]
tuple
[
str
,
str
|
None
,
str
|
None
,
str
|
None
,
str
|
None
],
list
[
DependencyPackage
],
]
=
{}
]
=
{}
# TODO: re-enable cache when poetry-core upgrade is completed
# TODO: re-enable cache when poetry-core upgrade is completed
...
@@ -60,6 +61,7 @@ class DependencyCache:
...
@@ -60,6 +61,7 @@ class DependencyCache:
dependency
.
source_type
,
dependency
.
source_type
,
dependency
.
source_url
,
dependency
.
source_url
,
dependency
.
source_reference
,
dependency
.
source_reference
,
dependency
.
source_subdirectory
,
)
)
packages
=
self
.
cache
.
get
(
key
)
packages
=
self
.
cache
.
get
(
key
)
...
...
src/poetry/puzzle/provider.py
View file @
77d89758
...
@@ -575,7 +575,7 @@ class Provider:
...
@@ -575,7 +575,7 @@ class Provider:
# of source type, reference etc. are taking into consideration when duplicates
# of source type, reference etc. are taking into consideration when duplicates
# are identified.
# are identified.
duplicates
:
dict
[
duplicates
:
dict
[
tuple
[
str
,
str
|
None
,
str
|
None
,
str
|
None
],
list
[
Dependency
]
tuple
[
str
,
str
|
None
,
str
|
None
,
str
|
None
,
str
|
None
],
list
[
Dependency
]
]
=
{}
]
=
{}
for
dep
in
dependencies
:
for
dep
in
dependencies
:
key
=
(
key
=
(
...
@@ -583,6 +583,7 @@ class Provider:
...
@@ -583,6 +583,7 @@ class Provider:
dep
.
source_type
,
dep
.
source_type
,
dep
.
source_url
,
dep
.
source_url
,
dep
.
source_reference
,
dep
.
source_reference
,
dep
.
source_subdirectory
,
)
)
if
key
not
in
duplicates
:
if
key
not
in
duplicates
:
duplicates
[
key
]
=
[]
duplicates
[
key
]
=
[]
...
...
tests/fixtures/git/github.com/demo/subdirectories/one-copy/pyproject.toml
0 → 100644
View file @
77d89758
[tool.poetry]
name
=
"one"
version
=
"1.0.0"
description
=
"Some description."
authors
=
[]
license
=
"MIT"
[tool.poetry.dependencies]
python
=
"^3.7"
tests/fixtures/git/github.com/demo/subdirectories/one/pyproject.toml
0 → 100644
View file @
77d89758
[tool.poetry]
name
=
"one"
version
=
"1.0.0"
description
=
"Some description."
authors
=
[]
license
=
"MIT"
[tool.poetry.dependencies]
python
=
"^3.7"
tests/fixtures/git/github.com/demo/subdirectories/two/pyproject.toml
0 → 100644
View file @
77d89758
[tool.poetry]
name
=
"two"
version
=
"2.0.0"
description
=
"Some description."
authors
=
[]
license
=
"MIT"
[tool.poetry.dependencies]
python
=
"^3.7"
tests/fixtures/with_conditional_path_deps/demo_one/pyproject.toml
0 → 100644
View file @
77d89758
[tool.poetry]
name
=
"demo"
version
=
"1.2.3"
description
=
"Some description."
authors
=
[]
license
=
"MIT"
[tool.poetry.dependencies]
python
=
"^3.7"
tests/fixtures/with_conditional_path_deps/demo_two/pyproject.toml
0 → 100644
View file @
77d89758
[tool.poetry]
name
=
"demo"
version
=
"1.2.3"
description
=
"Some description."
authors
=
[]
license
=
"MIT"
[tool.poetry.dependencies]
python
=
"^3.7"
tests/fixtures/with_conditional_path_deps/pyproject.toml
0 → 100644
View file @
77d89758
[tool.poetry]
name
=
"sample"
version
=
"1.0.0"
description
=
"Sample Project"
authors
=
[]
license
=
"MIT"
[tool.poetry.dependencies]
python
=
"^3.7"
demo
=
[
{
path
=
"demo_one"
,
platform
=
"linux"
}
,
{
path
=
"demo_two"
,
platform
=
"win32"
}
,
]
tests/mixology/version_solver/test_dependency_cache.py
View file @
77d89758
...
@@ -59,3 +59,65 @@ def test_solver_dependency_cache_respects_source_type(
...
@@ -59,3 +59,65 @@ def test_solver_dependency_cache_respects_source_type(
package_git
.
package
.
source_resolved_reference
package_git
.
package
.
source_resolved_reference
==
"9cf87a285a2d3fbb0b9fa621997b3acc3631ed24"
==
"9cf87a285a2d3fbb0b9fa621997b3acc3631ed24"
)
)
def
test_solver_dependency_cache_respects_subdirectories
(
root
:
ProjectPackage
,
provider
:
Provider
,
repo
:
Repository
):
dependency_one
=
Factory
.
create_dependency
(
"one"
,
{
"git"
:
"https://github.com/demo/subdirectories.git"
,
"subdirectory"
:
"one"
,
"platform"
:
"linux"
,
},
)
dependency_one_copy
=
Factory
.
create_dependency
(
"one"
,
{
"git"
:
"https://github.com/demo/subdirectories.git"
,
"subdirectory"
:
"one-copy"
,
"platform"
:
"win32"
,
},
)
root
.
add_dependency
(
dependency_one
)
root
.
add_dependency
(
dependency_one_copy
)
cache
=
DependencyCache
(
provider
)
cache
.
search_for
.
cache_clear
()
# ensure cache was never hit for both calls
cache
.
search_for
(
dependency_one
)
cache
.
search_for
(
dependency_one_copy
)
assert
not
cache
.
search_for
.
cache_info
()
.
hits
packages_one
=
cache
.
search_for
(
dependency_one
)
packages_one_copy
=
cache
.
search_for
(
dependency_one_copy
)
if
not
is_poetry_core_1_1_0a7_compat
:
assert
cache
.
search_for
.
cache_info
()
.
hits
==
2
assert
cache
.
search_for
.
cache_info
()
.
currsize
==
2
assert
len
(
packages_one
)
==
len
(
packages_one_copy
)
==
1
package_one
=
packages_one
[
0
]
package_one_copy
=
packages_one_copy
[
0
]
assert
package_one
.
package
.
name
==
package_one_copy
.
name
assert
package_one
.
package
.
version
.
text
==
package_one_copy
.
package
.
version
.
text
assert
package_one
.
package
.
source_type
==
package_one_copy
.
source_type
==
"git"
assert
(
package_one
.
package
.
source_resolved_reference
==
package_one_copy
.
source_resolved_reference
==
"9cf87a285a2d3fbb0b9fa621997b3acc3631ed24"
)
assert
(
package_one
.
package
.
source_subdirectory
!=
package_one_copy
.
source_subdirectory
)
assert
package_one
.
package
.
source_subdirectory
==
"one"
assert
package_one_copy
.
package
.
source_subdirectory
==
"one-copy"
assert
package_one
.
dependency
.
marker
.
intersect
(
package_one_copy
.
dependency
.
marker
)
.
is_empty
()
tests/puzzle/test_provider.py
View file @
77d89758
...
@@ -12,7 +12,9 @@ from poetry.core.packages.file_dependency import FileDependency
...
@@ -12,7 +12,9 @@ from poetry.core.packages.file_dependency import FileDependency
from
poetry.core.packages.project_package
import
ProjectPackage
from
poetry.core.packages.project_package
import
ProjectPackage
from
poetry.core.packages.vcs_dependency
import
VCSDependency
from
poetry.core.packages.vcs_dependency
import
VCSDependency
from
poetry.factory
import
Factory
from
poetry.inspection.info
import
PackageInfo
from
poetry.inspection.info
import
PackageInfo
from
poetry.packages
import
DependencyPackage
from
poetry.puzzle.provider
import
Provider
from
poetry.puzzle.provider
import
Provider
from
poetry.repositories.pool
import
Pool
from
poetry.repositories.pool
import
Pool
from
poetry.repositories.repository
import
Repository
from
poetry.repositories.repository
import
Repository
...
@@ -510,3 +512,76 @@ def test_search_for_file_wheel_with_extras(provider: Provider):
...
@@ -510,3 +512,76 @@ def test_search_for_file_wheel_with_extras(provider: Provider):
"foo"
:
[
get_dependency
(
"cleo"
)],
"foo"
:
[
get_dependency
(
"cleo"
)],
"bar"
:
[
get_dependency
(
"tomlkit"
)],
"bar"
:
[
get_dependency
(
"tomlkit"
)],
}
}
def
test_complete_package_preserves_source_type
(
provider
:
Provider
)
->
None
:
fixtures
=
Path
(
__file__
)
.
parent
.
parent
/
"fixtures"
project_dir
=
fixtures
.
joinpath
(
"with_conditional_path_deps"
)
poetry
=
Factory
()
.
create_poetry
(
cwd
=
project_dir
)
complete_package
=
provider
.
complete_package
(
DependencyPackage
(
poetry
.
package
.
to_dependency
(),
poetry
.
package
)
)
requires
=
complete_package
.
package
.
all_requires
assert
len
(
requires
)
==
2
assert
{
requires
[
0
]
.
source_url
,
requires
[
1
]
.
source_url
}
==
{
project_dir
.
joinpath
(
"demo_one"
)
.
as_posix
(),
project_dir
.
joinpath
(
"demo_two"
)
.
as_posix
(),
}
assert
{
str
(
requires
[
0
]
.
marker
),
str
(
requires
[
1
]
.
marker
)}
==
{
'sys_platform == "linux"'
,
'sys_platform == "win32"'
,
}
def
test_complete_package_preserves_source_type_with_subdirectories
(
provider
:
Provider
,
root
:
ProjectPackage
)
->
None
:
dependency_one
=
Factory
.
create_dependency
(
"one"
,
{
"git"
:
"https://github.com/demo/subdirectories.git"
,
"subdirectory"
:
"one"
,
"platform"
:
"linux"
,
},
)
dependency_one_copy
=
Factory
.
create_dependency
(
"one"
,
{
"git"
:
"https://github.com/demo/subdirectories.git"
,
"subdirectory"
:
"one-copy"
,
"platform"
:
"win32"
,
},
)
dependency_two
=
Factory
.
create_dependency
(
"two"
,
{
"git"
:
"https://github.com/demo/subdirectories.git"
,
"subdirectory"
:
"two"
},
)
root
.
add_dependency
(
Factory
.
create_dependency
(
"one"
,
{
"git"
:
"https://github.com/demo/subdirectories.git"
,
"subdirectory"
:
"one"
,
"platform"
:
"linux"
,
},
)
)
root
.
add_dependency
(
dependency_one_copy
)
root
.
add_dependency
(
dependency_two
)
complete_package
=
provider
.
complete_package
(
DependencyPackage
(
root
.
to_dependency
(),
root
)
)
requires
=
complete_package
.
package
.
all_requires
assert
len
(
requires
)
==
3
assert
{
r
.
to_pep_508
()
for
r
in
requires
}
==
{
dependency_one
.
to_pep_508
(),
dependency_one_copy
.
to_pep_508
(),
dependency_two
.
to_pep_508
(),
}
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