Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
后端镜像
Pdm
提交
db89b221
P
Pdm
项目概览
后端镜像
/
Pdm
通知
0
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
Pdm
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
db89b221
编写于
2月 26, 2021
作者:
F
Frost Ming
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Editable version take precedence over non-editable version
上级
673a7ca0
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
28 addition
and
6 deletion
+28
-6
news/278.bugfix.rst
news/278.bugfix.rst
+1
-0
pdm/installers/installers.py
pdm/installers/installers.py
+1
-1
pdm/installers/synchronizers.py
pdm/installers/synchronizers.py
+5
-2
pdm/models/candidates.py
pdm/models/candidates.py
+6
-1
tests/cli/test_actions.py
tests/cli/test_actions.py
+12
-0
tests/conftest.py
tests/conftest.py
+3
-2
未找到文件。
news/278.bugfix.rst
0 → 100644
浏览文件 @
db89b221
Fix a bug that editable package doesn't override the non-editable version in the working set.
pdm/installers/installers.py
浏览文件 @
db89b221
...
...
@@ -20,7 +20,7 @@ if TYPE_CHECKING:
def
is_dist_editable
(
dist
:
Distribution
)
->
bool
:
return
isinstance
(
dist
,
EggInfoDistribution
)
return
isinstance
(
dist
,
EggInfoDistribution
)
or
getattr
(
dist
,
"editable"
,
False
)
def
format_dist
(
dist
:
Distribution
)
->
str
:
...
...
pdm/installers/synchronizers.py
浏览文件 @
db89b221
...
...
@@ -117,8 +117,11 @@ class Synchronizer:
can
=
candidates
.
pop
(
key
)
if
can
.
marker
and
not
can
.
marker
.
evaluate
(
environment
):
to_remove
.
append
(
key
)
elif
not
is_dist_editable
(
dist
)
and
dist
.
version
!=
can
.
version
:
# XXX: An editable distribution is always considered as consistent.
elif
not
is_dist_editable
(
dist
)
and
(
dist
.
version
!=
can
.
version
or
can
.
req
.
editable
):
to_update
.
append
(
key
)
elif
is_dist_editable
(
dist
)
and
not
can
.
req
.
editable
:
to_update
.
append
(
key
)
elif
key
not
in
self
.
all_candidates
and
key
not
in
self
.
SEQUENTIAL_PACKAGES
:
# Remove package only if it is not required by any section
...
...
pdm/models/candidates.py
浏览文件 @
db89b221
...
...
@@ -237,7 +237,12 @@ class Candidate:
}
project_root
=
self
.
environment
.
project
.
root
.
as_posix
()
if
self
.
req
.
is_vcs
:
result
.
update
({
self
.
req
.
vcs
:
self
.
req
.
repo
,
"revision"
:
self
.
revision
})
result
.
update
(
{
self
.
req
.
vcs
:
self
.
req
.
repo
,
"ref"
:
self
.
req
.
ref
if
self
.
req
.
editable
else
self
.
revision
,
}
)
elif
not
self
.
req
.
is_named
:
if
self
.
req
.
is_file_or_url
and
self
.
req
.
is_local_dir
:
result
.
update
(
path
=
path_replace
(
project_root
,
"."
,
self
.
req
.
str_path
))
...
...
tests/cli/test_actions.py
浏览文件 @
db89b221
...
...
@@ -450,3 +450,15 @@ def test_update_ignore_constraints(project, repository, working_set):
def
test_init_validate_python_requires
(
project_no_init
):
with
pytest
.
raises
(
ValueError
):
actions
.
do_init
(
project_no_init
,
python_requires
=
"3.7"
)
def
test_editable_package_override_non_editable
(
project
,
repository
,
working_set
,
vcs
):
project
.
environment
.
python_requires
=
PySpecSet
(
">=3.6"
)
actions
.
do_add
(
project
,
packages
=
[
"git+https://github.com/test-root/demo.git#egg=demo"
]
)
actions
.
do_add
(
project
,
editables
=
[
"git+https://github.com/test-root/demo.git#egg=demo"
],
)
assert
working_set
[
"demo"
].
editable
tests/conftest.py
浏览文件 @
db89b221
...
...
@@ -146,9 +146,10 @@ class TestProject(Project):
class
Distribution
:
def
__init__
(
self
,
key
,
version
):
def
__init__
(
self
,
key
,
version
,
editable
=
False
):
self
.
key
=
key
self
.
version
=
version
self
.
editable
=
editable
self
.
dependencies
=
[]
def
requires
(
self
,
extras
=
()):
...
...
@@ -190,7 +191,7 @@ def working_set(mocker, repository):
pip_logging
.
_log_state
.
indentation
=
0
dependencies
=
repository
.
get_dependencies
(
candidate
)[
0
]
key
=
safe_name
(
candidate
.
name
).
lower
()
dist
=
Distribution
(
key
,
candidate
.
version
)
dist
=
Distribution
(
key
,
candidate
.
version
,
candidate
.
req
.
editable
)
dist
.
dependencies
=
dependencies
rv
.
add_distribution
(
dist
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录