Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
喜羊羊3508
Dak
提交
3525c086
D
Dak
项目概览
喜羊羊3508
/
Dak
8 个月 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
D
Dak
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
3525c086
编写于
3月 27, 2021
作者:
M
Mark Hymers
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Let cruft-report generate commands only
Signed-off-by:
N
Mark Hymers
<
mhy@debian.org
>
上级
69b26622
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
106 addition
and
79 deletion
+106
-79
dak/cruft_report.py
dak/cruft_report.py
+106
-79
未找到文件。
dak/cruft_report.py
浏览文件 @
3525c086
...
...
@@ -71,6 +71,29 @@ Check for obsolete or duplicated packages.
################################################################################
def
print_info
(
s
=
""
):
cnf
=
Config
()
if
cnf
.
subtree
(
"Cruft-Report::Options"
)[
"Commands-Only"
]:
return
print
(
s
)
def
print_cmd
(
s
,
indent
=
4
):
cnf
=
Config
()
# Indent if doing the human readable display
if
not
cnf
.
subtree
(
"Cruft-Report::Options"
)[
"Commands-Only"
]:
ind
=
" "
*
indent
s
=
ind
+
s
print
(
s
)
################################################################################
def
add_nbs
(
nbs_d
,
source
,
version
,
package
,
suite_id
,
session
):
# Ensure the package is still in the suite (someone may have already removed it)
if
package
in
no_longer_in_suite
:
...
...
@@ -153,17 +176,17 @@ def do_nfu(nfu_packages):
a2p
[
architecture
].
append
(
package
)
if
output
:
print
(
"Obsolete by Not-For-Us"
)
print
(
"----------------------"
)
print
()
print
(
output
)
print
_info
(
"Obsolete by Not-For-Us"
)
print
_info
(
"----------------------"
)
print
_info
()
print
_info
(
output
)
print
(
"Suggested commands:"
)
print
_info
(
"Suggested commands:"
)
for
architecture
in
a2p
:
if
a2p
[
architecture
]:
print
((
"
dak rm -o -m
\"
[auto-cruft] NFU
\"
-s %s -a %s -b %s"
%
(
suite
.
suite_name
,
architecture
,
" "
.
join
(
a2p
[
architecture
]))))
print
()
print
_cmd
((
"
dak rm -o -m
\"
[auto-cruft] NFU
\"
-s %s -a %s -b %s"
%
(
suite
.
suite_name
,
architecture
,
" "
.
join
(
a2p
[
architecture
])))
,
indent
=
1
)
print
_info
()
def
parse_nfu
(
architecture
):
...
...
@@ -198,18 +221,18 @@ def do_newer_version(lowersuite_name, highersuite_name, code, session):
if
len
(
list
)
>
0
:
nv_to_remove
=
[]
title
=
"Newer version in %s"
%
lowersuite_name
print
(
title
)
print
(
"-"
*
len
(
title
))
print
()
print
_info
(
title
)
print
_info
(
"-"
*
len
(
title
))
print
_info
()
for
i
in
list
:
(
source
,
higher_version
,
lower_version
)
=
i
print
(
" o %s (%s, %s)"
%
(
source
,
higher_version
,
lower_version
))
print
_info
(
" o %s (%s, %s)"
%
(
source
,
higher_version
,
lower_version
))
nv_to_remove
.
append
(
source
)
print
()
print
(
"Suggested command:"
)
print
(
"
dak rm -m
\"
[auto-cruft] %s
\"
-s %s %s"
%
(
code
,
highersuite_name
,
" "
.
join
(
nv_to_remove
)))
print
()
print
_info
()
print
_info
(
"Suggested command:"
)
print
_cmd
(
"
dak rm -m
\"
[auto-cruft] %s
\"
-s %s %s"
%
(
code
,
highersuite_name
,
" "
.
join
(
nv_to_remove
))
,
indent
=
1
)
print
_info
()
################################################################################
...
...
@@ -218,22 +241,22 @@ def reportWithoutSource(suite_name, suite_id, session, rdeps=False):
rows
=
query_without_source
(
suite_id
,
session
)
title
=
'packages without source in suite %s'
%
suite_name
if
rows
.
rowcount
>
0
:
print
(
'%s
\n
%s
\n
'
%
(
title
,
'-'
*
len
(
title
)))
print
_info
(
'%s
\n
%s
\n
'
%
(
title
,
'-'
*
len
(
title
)))
message
=
'"[auto-cruft] no longer built from source"'
for
row
in
rows
:
(
package
,
version
)
=
row
print
(
"* package %s in version %s is no longer built from source"
%
print
_info
(
"* package %s in version %s is no longer built from source"
%
(
package
,
version
))
print
(
" - suggested command:"
)
print
(
"
dak rm -m %s -s %s -a all -p -R -b %s"
%
print
_info
(
" - suggested command:"
)
print
_cmd
(
"
dak rm -m %s -s %s -a all -p -R -b %s"
%
(
message
,
suite_name
,
package
))
if
rdeps
:
if
utils
.
check_reverse_depends
([
package
],
suite_name
,
[],
session
,
True
):
print
()
print
_info
()
else
:
print
(
" - No dependency problem found
\n
"
)
print
_info
(
" - No dependency problem found
\n
"
)
else
:
print
()
print
_info
()
def
queryNewerAll
(
suite_name
,
session
):
...
...
@@ -260,14 +283,14 @@ def reportNewerAll(suite_name, session):
rows
=
queryNewerAll
(
suite_name
,
session
)
title
=
'obsolete arch any packages in suite %s'
%
suite_name
if
rows
.
rowcount
>
0
:
print
(
'%s
\n
%s
\n
'
%
(
title
,
'-'
*
len
(
title
)))
print
_info
(
'%s
\n
%s
\n
'
%
(
title
,
'-'
*
len
(
title
)))
message
=
'"[auto-cruft] obsolete arch any package"'
for
row
in
rows
:
(
package
,
oldver
,
oldarch
,
newver
)
=
row
print
(
"* package %s is arch any in version %s but arch all in version %s"
%
print
_info
(
"* package %s is arch any in version %s but arch all in version %s"
%
(
package
,
oldver
,
newver
))
print
(
" - suggested command:"
)
print
(
"
dak rm -o -m %s -s %s -a %s -p -b %s
\n
"
%
print
_info
(
" - suggested command:"
)
print
_cmd
(
"
dak rm -o -m %s -s %s -a %s -p -b %s
\n
"
%
(
message
,
suite_name
,
oldarch
,
package
))
...
...
@@ -276,26 +299,26 @@ def reportNBS(suite_name, suite_id, rdeps=False):
nbsRows
=
queryNBS
(
suite_id
,
session
)
title
=
'NBS packages in suite %s'
%
suite_name
if
nbsRows
.
rowcount
>
0
:
print
(
'%s
\n
%s
\n
'
%
(
title
,
'-'
*
len
(
title
)))
print
_info
(
'%s
\n
%s
\n
'
%
(
title
,
'-'
*
len
(
title
)))
for
row
in
nbsRows
:
(
pkg_list
,
arch_list
,
source
,
version
)
=
row
pkg_string
=
' '
.
join
(
pkg_list
)
arch_string
=
','
.
join
(
arch_list
)
print
(
"* source package %s version %s no longer builds"
%
print
_info
(
"* source package %s version %s no longer builds"
%
(
source
,
version
))
print
(
" binary package(s): %s"
%
pkg_string
)
print
(
" on %s"
%
arch_string
)
print
(
" - suggested command:"
)
print
_info
(
" binary package(s): %s"
%
pkg_string
)
print
_info
(
" on %s"
%
arch_string
)
print
_info
(
" - suggested command:"
)
message
=
'"[auto-cruft] NBS (no longer built by %s)"'
%
source
print
(
"
dak rm -o -m %s -s %s -a %s -p -R -b %s"
%
print
_cmd
(
"
dak rm -o -m %s -s %s -a %s -p -R -b %s"
%
(
message
,
suite_name
,
arch_string
,
pkg_string
))
if
rdeps
:
if
utils
.
check_reverse_depends
(
pkg_list
,
suite_name
,
arch_list
,
session
,
True
):
print
()
print
_info
()
else
:
print
(
" - No dependency problem found
\n
"
)
print
_info
(
" - No dependency problem found
\n
"
)
else
:
print
()
print
_info
()
session
.
close
()
...
...
@@ -303,16 +326,16 @@ def reportNBSMetadata(suite_name, suite_id, session, rdeps=False):
rows
=
queryNBS_metadata
(
suite_id
,
session
)
title
=
'NBS packages (from metadata) in suite %s'
%
suite_name
if
rows
.
rowcount
>
0
:
print
(
'%s
\n
%s
\n
'
%
(
title
,
'-'
*
len
(
title
)))
print
_info
(
'%s
\n
%s
\n
'
%
(
title
,
'-'
*
len
(
title
)))
for
row
in
rows
:
(
packages
,
architecture
,
source
,
version
)
=
row
print
(
"* source package %s version %s no longer builds"
%
print
_info
(
"* source package %s version %s no longer builds"
%
(
source
,
version
))
print
(
" binary package(s): %s"
%
packages
)
print
(
" on %s"
%
architecture
)
print
(
" - suggested command:"
)
print
_info
(
" binary package(s): %s"
%
packages
)
print
_info
(
" on %s"
%
architecture
)
print
_info
(
" - suggested command:"
)
message
=
'"[auto-cruft] NBS (no longer built by %s - based on source metadata)"'
%
source
print
(
"
dak rm -o -m %s -s %s -a %s -p -R -b %s"
%
print
_cmd
(
"
dak rm -o -m %s -s %s -a %s -p -R -b %s"
%
(
message
,
suite_name
,
architecture
,
packages
))
if
rdeps
:
archs
=
[
architecture
]
...
...
@@ -320,11 +343,11 @@ def reportNBSMetadata(suite_name, suite_id, session, rdeps=False):
# when archs is None, rdeps are checked on all archs in the suite
archs
=
None
if
utils
.
check_reverse_depends
(
packages
.
split
(),
suite_name
,
archs
,
session
,
True
):
print
()
print
_info
()
else
:
print
(
" - No dependency problem found
\n
"
)
print
_info
(
" - No dependency problem found
\n
"
)
else
:
print
()
print
_info
()
def
reportAllNBS
(
suite_name
,
suite_id
,
session
,
rdeps
=
False
):
...
...
@@ -336,22 +359,22 @@ def reportAllNBS(suite_name, suite_id, session, rdeps=False):
def
do_dubious_nbs
(
dubious_nbs
):
print
(
"Dubious NBS"
)
print
(
"-----------"
)
print
()
print
_info
(
"Dubious NBS"
)
print
_info
(
"-----------"
)
print
_info
()
version_sort_key
=
functools
.
cmp_to_key
(
apt_pkg
.
version_compare
)
for
source
in
sorted
(
dubious_nbs
):
print
(
" * %s_%s builds: %s"
%
(
source
,
print
_info
(
" * %s_%s builds: %s"
%
(
source
,
source_versions
.
get
(
source
,
"??"
),
source_binaries
.
get
(
source
,
"(source does not exist)"
)))
print
(
" won't admit to building:"
)
print
_info
(
" won't admit to building:"
)
versions
=
sorted
(
dubious_nbs
[
source
],
key
=
version_sort_key
)
for
version
in
versions
:
packages
=
sorted
(
dubious_nbs
[
source
][
version
])
print
(
" o %s: %s"
%
(
version
,
", "
.
join
(
packages
)))
print
_info
(
" o %s: %s"
%
(
version
,
", "
.
join
(
packages
)))
print
()
print
_info
()
################################################################################
...
...
@@ -420,30 +443,30 @@ def report_obsolete_source(suite_name, session):
rows
=
obsolete_source
(
suite_name
,
session
)
if
rows
.
rowcount
==
0
:
return
print
(
"""Obsolete source packages in suite %s
print
_info
(
"""Obsolete source packages in suite %s
----------------------------------%s
\n
"""
%
(
suite_name
,
'-'
*
len
(
suite_name
)))
for
os_row
in
rows
.
fetchall
():
(
src
,
old_source
,
version
,
install_date
)
=
os_row
print
(
" * obsolete source %s version %s installed at %s"
%
print
_info
(
" * obsolete source %s version %s installed at %s"
%
(
old_source
,
version
,
install_date
))
for
sb_row
in
source_bin
(
old_source
,
session
):
(
package
,
)
=
sb_row
print
(
" - has built binary %s"
%
package
)
print
_info
(
" - has built binary %s"
%
package
)
for
nsb_row
in
newest_source_bab
(
suite_name
,
package
,
session
):
(
new_source
,
srcver
)
=
nsb_row
print
(
" currently built by source %s version %s"
%
print
_info
(
" currently built by source %s version %s"
%
(
new_source
,
srcver
))
print
(
" - suggested command:"
)
print
_info
(
" - suggested command:"
)
rm_opts
=
"-S -p -m
\"
[auto-cruft] obsolete source package
\"
"
print
(
"
dak rm -s %s %s %s
\n
"
%
(
suite_name
,
rm_opts
,
old_source
))
print
_cmd
(
"
dak rm -s %s %s %s
\n
"
%
(
suite_name
,
rm_opts
,
old_source
))
def
get_suite_binaries
(
suite
,
session
):
# Initalize a large hash table of all binary packages
binaries
=
{}
print
(
"Getting a list of binary packages in %s..."
%
suite
.
suite_name
)
print
_info
(
"Getting a list of binary packages in %s..."
%
suite
.
suite_name
)
q
=
session
.
execute
(
"""SELECT distinct b.package
FROM binaries b, bin_associations ba
WHERE ba.suite = :suiteid AND ba.bin = b.id"""
,
...
...
@@ -513,24 +536,24 @@ def report_outdated_nonfree(suite, session, rdeps=False):
if
packages
:
title
=
'Outdated non-free binaries in suite %s'
%
suite
message
=
'"[auto-cruft] outdated non-free binaries"'
print
(
'%s
\n
%s
\n
'
%
(
title
,
'-'
*
len
(
title
)))
print
_info
(
'%s
\n
%s
\n
'
%
(
title
,
'-'
*
len
(
title
)))
for
source
in
sorted
(
packages
):
archs
=
set
()
binaries
=
set
()
print
(
'* package %s has outdated non-free binaries'
%
source
)
print
(
' - suggested command:'
)
print
_info
(
'* package %s has outdated non-free binaries'
%
source
)
print
_info
(
' - suggested command:'
)
for
binary
in
sorted
(
packages
[
source
]):
binaries
.
add
(
binary
)
archs
=
archs
.
union
(
packages
[
source
][
binary
])
print
(
'
dak rm -o -m %s -s %s -a %s -p -R -b %s'
%
print
_cmd
(
'
dak rm -o -m %s -s %s -a %s -p -R -b %s'
%
(
message
,
suite
,
','
.
join
(
archs
),
' '
.
join
(
binaries
)))
if
rdeps
:
if
utils
.
check_reverse_depends
(
list
(
binaries
),
suite
,
archs
,
session
,
True
):
print
()
print
_info
()
else
:
print
(
" - No dependency problem found
\n
"
)
print
_info
(
" - No dependency problem found
\n
"
)
else
:
print
()
print
_info
()
################################################################################
...
...
@@ -544,12 +567,16 @@ def main():
(
'm'
,
"mode"
,
"Cruft-Report::Options::Mode"
,
"HasArg"
),
(
'R'
,
"rdep-check"
,
"Cruft-Report::Options::Rdep-Check"
),
(
's'
,
"suite"
,
"Cruft-Report::Options::Suite"
,
"HasArg"
),
(
'w'
,
"wanna-build-dump"
,
"Cruft-Report::Options::Wanna-Build-Dump"
,
"HasArg"
)]
(
'w'
,
"wanna-build-dump"
,
"Cruft-Report::Options::Wanna-Build-Dump"
,
"HasArg"
),
(
'c'
,
"commands-only"
,
"Cruft-Report::Options::Commands-Only"
)]
for
i
in
[
"help"
,
"Rdep-Check"
]:
key
=
"Cruft-Report::Options::%s"
%
i
if
key
not
in
cnf
:
cnf
[
key
]
=
""
if
"Cruft-Report::Options::Commands-Only"
not
in
cnf
:
cnf
[
"Cruft-Report::Options::Commands-Only"
]
=
""
cnf
[
"Cruft-Report::Options::Suite"
]
=
cnf
.
get
(
"Dinstall::DefaultSuite"
,
"unstable"
)
if
"Cruft-Report::Options::Mode"
not
in
cnf
:
...
...
@@ -715,29 +742,29 @@ def main():
###
if
Options
[
"Mode"
]
==
"full"
:
print
(
"="
*
75
)
print
()
print
_info
(
"="
*
75
)
print
_info
()
if
"nfu"
in
checks
:
do_nfu
(
nfu_packages
)
if
"bnb"
in
checks
:
print
(
"Unbuilt binary packages"
)
print
(
"-----------------------"
)
print
()
print
_info
(
"Unbuilt binary packages"
)
print
_info
(
"-----------------------"
)
print
_info
()
for
source
in
sorted
(
bin_not_built
):
binaries
=
sorted
(
bin_not_built
[
source
])
print
(
" o %s: %s"
%
(
source
,
", "
.
join
(
binaries
)))
print
()
print
_info
(
" o %s: %s"
%
(
source
,
", "
.
join
(
binaries
)))
print
_info
()
if
"bms"
in
checks
:
report_multiple_source
(
suite
)
if
"anais"
in
checks
:
print
(
"Architecture Not Allowed In Source"
)
print
(
"----------------------------------"
)
print
(
anais_output
)
print
()
print
_info
(
"Architecture Not Allowed In Source"
)
print
_info
(
"----------------------------------"
)
print
_info
(
anais_output
)
print
_info
()
if
"dubious nbs"
in
checks
:
do_dubious_nbs
(
dubious_nbs
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录