Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
openEuler-Advisor
提交
e15ae59f
O
openEuler-Advisor
项目概览
openeuler
/
openEuler-Advisor
通知
47
Star
4
Fork
4
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
openEuler-Advisor
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
e15ae59f
编写于
6月 24, 2020
作者:
S
Shinwell_Hu
提交者:
Gitee
6月 24, 2020
浏览文件
操作
浏览文件
下载
差异文件
!8 [version-recommend]解决版本号x 类型中字典序问题
Merge pull request !8 from licihua/next
上级
7ecf8fc2
6d290b86
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
57 addition
and
13 deletion
+57
-13
advisors/version_recommend.py
advisors/version_recommend.py
+57
-13
未找到文件。
advisors/version_recommend.py
浏览文件 @
e15ae59f
...
...
@@ -15,7 +15,7 @@ class VersionType:
return
version_entry
[
0
]
def
maintain_version
(
self
,
version_entry
,
current_version
,
pkg_type
):
return
None
return
current_version
def
_max
(
self
,
z1
,
z2
):
d1
=
tuple
(
self
.
_split
(
z1
))
# 第一个参数版本号拆分,获取里面的数字/字母,得到序列
...
...
@@ -137,7 +137,6 @@ class VersionType_x_y_z(VersionType):
for
version
in
version_list
:
# 第一轮比较取出最大的第一位
if
self
.
_max
(
x
,
version
[
0
])
<
0
:
x
=
version
[
0
]
print
(
'x = '
,
x
)
version_candidate
=
[]
for
version
in
version_list
:
# 将第一位最大的列入候选列表,准备第二位比较
...
...
@@ -154,7 +153,7 @@ class VersionType_x_y_z(VersionType):
continue
if
self
.
_max
(
y
,
version
[
1
])
<
0
:
y
=
version
[
1
]
print
(
'y = '
,
y
)
version_candidate
.
clear
()
for
version
in
version_list
:
# 将第二位最大的列入候选列表,准备第三位比较
...
...
@@ -171,7 +170,7 @@ class VersionType_x_y_z(VersionType):
continue
if
self
.
_max
(
z
,
version
[
2
])
<
0
:
z
=
version
[
2
]
print
(
'z = '
,
z
)
for
version
in
version_list
:
# 最后一位最大版本必须惟一,直接返回结果
if
len
(
version
)
<=
2
:
# 过滤仅二位的版本号
...
...
@@ -210,7 +209,7 @@ class VersionType_x_y(VersionType):
for
version
in
version_list
:
# 第一轮比较取出最大的第一位
if
self
.
_max
(
x
,
version
[
0
])
<
0
:
x
=
version
[
0
]
print
(
'x = '
,
x
)
version_candidate
=
[]
for
version
in
version_list
:
# 将第一位最大的列入候选列表,准备第二位比较
...
...
@@ -227,7 +226,7 @@ class VersionType_x_y(VersionType):
continue
if
self
.
_max
(
y
,
version
[
1
])
<
0
:
y
=
version
[
1
]
print
(
'y = '
,
y
)
version_candidate
.
clear
()
for
version
in
version_list
:
# x.y 版本类型中会小概率出现三位版本号,需要将第二位最大的列入候选列表,准备第三位比较
...
...
@@ -244,7 +243,6 @@ class VersionType_x_y(VersionType):
continue
if
self
.
_max
(
z
,
version
[
2
])
<
0
:
z
=
version
[
2
]
print
(
'z = '
,
z
)
for
version
in
version_list
:
# 最后一位最大版本必须惟一,直接返回结果
if
len
(
version
)
<=
2
:
# 过滤仅二位的版本号
...
...
@@ -255,7 +253,6 @@ class VersionType_x_y(VersionType):
return
''
def
maintain_version
(
self
,
version_entry
,
current_version
,
pkg_type
):
print
(
version_entry
)
version_candidate
=
[]
version_digital
=
re
.
split
(
r
'[._]'
,
current_version
)
# 将版本号做拆分
x
=
[]
...
...
@@ -288,6 +285,58 @@ class VersionType_x(VersionType):
return
False
return
True
def
latest_version
(
self
,
version_entry
):
if
len
(
version_entry
)
==
1
:
# 仅一个版本,当前即为最新版本
return
version_entry
[
0
]
version_list
=
[]
for
version
in
version_entry
:
version_list
.
append
(
re
.
split
(
r
'[._]'
,
version
))
# 将 version 拆分为列表,方便后续比较
x
=
'0'
for
version
in
version_list
:
# 第一轮比较取出最大的第一位
if
self
.
_max
(
x
,
version
[
0
])
<
0
:
x
=
version
[
0
]
version_candidate
=
[]
for
version
in
version_list
:
# 将第一位最大的列入候选列表,准备第二位比较
if
x
==
version
[
0
]:
version_candidate
.
append
(
version
)
if
len
(
version_candidate
)
==
1
:
# 仅一个版本,候选即为最新版本
return
'.'
.
join
(
version_candidate
[
0
])
version_list
=
version_candidate
[:]
y
=
'0'
for
version
in
version_list
:
# 第二轮比较取出最大的第二位
if
len
(
version
)
<=
1
:
# 过滤仅一位的版本号
continue
if
self
.
_max
(
y
,
version
[
1
])
<
0
:
y
=
version
[
1
]
x
.
append
(
y
)
return
'.'
.
join
(
x
)
def
maintain_version
(
self
,
version_entry
,
current_version
,
pkg_type
):
version_candidate
=
[]
version_digital
=
re
.
split
(
r
'[._]'
,
current_version
)
# 将版本号做拆分
x
=
[]
x
.
append
(
version_digital
[
0
])
for
version
in
version_entry
:
version_temp
=
re
.
split
(
r
'[._]'
,
version
)
if
version_digital
[
0
]
==
version_temp
[
0
]:
# 如果版本号与当前版本前两位一致,说明是维护分支版本
version_candidate
.
append
(
version_temp
)
# 将同特性版本的子版本挑选出来
if
len
(
version_candidate
)
==
1
:
return
'.'
.
join
(
version_candidate
[
0
])
y
=
'0'
for
version
in
version_candidate
[
0
:]:
if
len
(
version
)
<=
1
:
continue
if
self
.
_max
(
version
[
1
],
y
)
>
0
:
y
=
version
[
1
]
x
.
append
(
y
)
return
'.'
.
join
(
x
)
def
__init__
(
self
):
self
.
_version_type
=
'x'
...
...
@@ -498,7 +547,6 @@ class VersionRecommend:
version_entry
.
remove
(
version
)
else
:
break
print
(
version_entry
)
self
.
version_type
=
self
.
_version_match
(
version_entry
)
if
self
.
version_type
is
None
:
print
(
'version type is None:'
,
current_version
)
...
...
@@ -529,7 +577,6 @@ class VersionRecommend:
continue
for
method
,
count
in
version_method
.
items
():
if
method
.
version_match
(
version
):
print
(
version
,
method
.
get_version_mode
())
version_method
[
method
]
=
count
+
1
# 解决多版本类型问题,选取类型最多的作为匹配,这个处理不是最优方案,需要改进
...
...
@@ -542,18 +589,15 @@ class VersionRecommend:
def
_version_valid
(
self
,
version
):
m
=
re
.
match
(
'^[a-z0-9_\.]*$'
,
version
)
if
m
is
None
:
# 版本号应该是 数字/小写字母/下划线/. 组成
print
(
version
,
'is invalid'
)
return
False
m
=
re
.
match
(
'^[0-9].*'
,
version
)
if
m
is
None
:
# 版本号应该是数字开头
print
(
version
,
'is invalid'
)
return
False
if
'rc'
in
version
or
'RC'
in
version
:
# 仅获取正式版本
return
False
print
(
version
,
'is valid'
)
return
True
def
_get_latest_version
(
self
,
version_entry
):
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录