Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
喜羊羊3508
Dak
提交
87d886a2
D
Dak
项目概览
喜羊羊3508
/
Dak
12 个月 前同步成功
通知
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,发现更多精彩内容 >>
提交
87d886a2
编写于
5月 23, 2009
作者:
M
Mark Hymers
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
convert contents.py to the new API
Signed-off-by:
N
Mark Hymers
<
mhy@debian.org
>
上级
5387de41
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
45 addition
and
115 deletion
+45
-115
dak/contents.py
dak/contents.py
+45
-115
未找到文件。
dak/contents.py
浏览文件 @
87d886a2
...
...
@@ -45,7 +45,8 @@ import apt_pkg
from
daklib
import
utils
from
daklib.binary
import
Binary
from
daklib.config
import
Config
from
daklib.dbconn
import
DBConn
from
daklib.dbconn
import
*
################################################################################
def
usage
(
exit_code
=
0
):
...
...
@@ -87,28 +88,6 @@ log = logging.getLogger()
################################################################################
# get all the arches delivered for a given suite
# this should probably exist somehere common
arches_q
=
"""PREPARE arches_q(int) as
SELECT s.architecture, a.arch_string
FROM suite_architectures s
JOIN architecture a ON (s.architecture=a.id)
WHERE suite = $1"""
# find me the .deb for a given binary id
debs_q
=
"""PREPARE debs_q(int, int) as
SELECT b.id, f.filename FROM bin_assoc_by_arch baa
JOIN binaries b ON baa.bin=b.id
JOIN files f ON b.file=f.id
WHERE suite = $1
AND arch = $2"""
# ask if we already have contents associated with this binary
olddeb_q
=
"""PREPARE olddeb_q(int) as
SELECT 1 FROM content_associations
WHERE binary_pkg = $1
LIMIT 1"""
# find me all of the contents for a given .deb
contents_q
=
"""PREPARE contents_q(int,int) as
SELECT (p.path||'/'||n.file) AS fn,
...
...
@@ -151,28 +130,6 @@ udeb_contents_q = """PREPARE udeb_contents_q(int,int,int) as
# GROUP BY fn
# ORDER BY fn;"""
# clear out all of the temporarily stored content associations
# this should be run only after p-a has run. after a p-a
# run we should have either accepted or rejected every package
# so there should no longer be anything in the queue
remove_pending_contents_cruft_q
=
"""DELETE FROM pending_content_associations"""
# delete any filenames we are storing which have no binary associated with them
remove_filename_cruft_q
=
"""DELETE FROM content_file_names
WHERE id IN (SELECT cfn.id FROM content_file_names cfn
LEFT JOIN content_associations ca
ON ca.filename=cfn.id
WHERE ca.id IS NULL)"""
# delete any paths we are storing which have no binary associated with them
remove_filepath_cruft_q
=
"""DELETE FROM content_file_paths
WHERE id IN (SELECT cfn.id FROM content_file_paths cfn
LEFT JOIN content_associations ca
ON ca.filepath=cfn.id
WHERE ca.id IS NULL)"""
class
EndOfContents
(
object
):
"""
A sentry object for the end of the filename stream
...
...
@@ -288,20 +245,34 @@ class Contents(object):
def
reject
(
self
,
message
):
log
.
error
(
"E: %s"
%
message
)
# goal column for section column
_goal_column
=
54
def
cruft
(
self
):
"""
remove files/paths from the DB which are no longer referenced
by binaries and clean the temporary table
"""
cursor
=
DBConn
().
cursor
();
cursor
.
execute
(
"BEGIN WORK"
)
cursor
.
execute
(
remove_pending_contents_cruft_q
)
cursor
.
execute
(
remove_filename_cruft_q
)
cursor
.
execute
(
remove_filepath_cruft_q
)
cursor
.
execute
(
"COMMIT"
)
s
=
DBConn
().
session
()
# clear out all of the temporarily stored content associations
# this should be run only after p-a has run. after a p-a
# run we should have either accepted or rejected every package
# so there should no longer be anything in the queue
s
.
query
(
PendingContentsAssociation
).
delete
()
# delete any filenames we are storing which have no binary associated
# with them
cafq
=
s
.
query
(
ContentAssociation
.
filename_id
).
distinct
()
cfq
=
s
.
query
(
ContentFilename
)
cfq
=
cfq
.
filter
(
~
ContentFilename
.
cafilename_id
.
in_
(
cafq
))
cfq
.
delete
()
# delete any paths we are storing which have no binary associated with
# them
capq
=
s
.
query
(
ContentAssociation
.
filepath_id
).
distinct
()
cpq
=
s
.
query
(
ContentFilepath
)
cpq
=
cpq
.
filter
(
~
ContentFilepath
.
cafilepath_id
.
in_
(
capq
))
cpq
.
delete
()
s
.
commit
()
def
bootstrap
(
self
):
...
...
@@ -310,38 +281,28 @@ class Contents(object):
"""
pooldir
=
Config
()[
'Dir::Pool'
]
cursor
=
DBConn
().
cursor
();
DBConn
().
prepare
(
"debs_q"
,
debs_q
)
DBConn
().
prepare
(
"olddeb_q"
,
olddeb_q
)
DBConn
().
prepare
(
"arches_q"
,
arches_q
)
suites
=
self
.
_suites
()
for
suite
in
[
i
.
lower
()
for
i
in
suites
]:
suite_id
=
DBConn
().
get_suite_id
(
suite
)
arch_list
=
self
.
_arches
(
cursor
,
suite_id
)
arch_all_id
=
DBConn
().
get_architecture_id
(
"all"
)
for
arch_id
in
arch_list
:
cursor
.
execute
(
"EXECUTE debs_q(%d, %d)"
%
(
suite_id
,
arch_id
[
0
]
)
)
count
=
0
while
True
:
deb
=
cursor
.
fetchone
()
if
not
deb
:
break
count
+=
1
cursor1
=
DBConn
().
cursor
();
cursor1
.
execute
(
"EXECUTE olddeb_q(%d)"
%
(
deb
[
0
]
)
)
old
=
cursor1
.
fetchone
()
if
old
:
log
.
debug
(
"already imported: %s"
%
(
deb
[
1
])
)
s
=
DBConn
().
session
()
for
suite
in
s
.
query
(
Suite
).
all
():
for
arch
in
get_suite_architectures
(
suite
.
suite_name
,
skipsrc
=
True
,
skipall
=
True
,
session
=
s
):
q
=
s
.
query
(
BinAssociation
).
join
(
Suite
)
q
=
q
.
join
(
Suite
).
filter_by
(
suite_name
=
suite
.
suite_name
)
q
=
q
.
join
(
DBBinary
).
join
(
Architecture
).
filter_by
(
arch
.
arch_string
)
for
ba
in
q
:
filename
=
ba
.
binary
.
poolfile
.
filename
# Check for existing contents
existingq
=
s
.
query
(
ContentAssociations
).
filter_by
(
binary_pkg
=
ba
.
binary_id
).
limit
(
1
)
if
existingq
.
count
()
>
0
:
log
.
debug
(
"already imported: %s"
%
(
filename
))
else
:
log
.
debug
(
"scanning: %s"
%
(
deb
[
1
])
)
debfile
=
os
.
path
.
join
(
pooldir
,
deb
[
1
]
)
if
os
.
path
.
exists
(
debfile
):
Binary
(
debfile
,
self
.
reject
).
scan_package
(
deb
[
0
],
True
)
# We don't have existing contents so import them
log
.
debug
(
"scanning: %s"
%
(
filename
)
)
debfile
=
os
.
path
.
join
(
pooldir
,
filename
)
if
os
.
path
.
exists
(
debfile
):
Binary
(
debfile
,
self
.
reject
).
scan_package
(
ba
.
binary_id
,
True
)
else
:
log
.
error
(
"missing .deb: %s"
%
deb
[
1
])
log
.
error
(
"missing .deb: %s"
%
filename
)
def
generate
(
self
):
"""
...
...
@@ -349,7 +310,6 @@ class Contents(object):
"""
cursor
=
DBConn
().
cursor
()
DBConn
().
prepare
(
"arches_q"
,
arches_q
)
DBConn
().
prepare
(
"contents_q"
,
contents_q
)
DBConn
().
prepare
(
"udeb_contents_q"
,
udeb_contents_q
)
...
...
@@ -444,36 +404,6 @@ class Contents(object):
################################################################################
def
_suites
(
self
):
"""
return a list of suites to operate on
"""
if
Config
().
has_key
(
"%s::%s"
%
(
options_prefix
,
"Suite"
)):
suites
=
utils
.
split_args
(
Config
()[
"%s::%s"
%
(
options_prefix
,
"Suite"
)])
else
:
suites
=
Config
().
SubTree
(
"Suite"
).
List
()
return
suites
def
_arches
(
self
,
cursor
,
suite
):
"""
return a list of archs to operate on
"""
arch_list
=
[]
cursor
.
execute
(
"EXECUTE arches_q(%d)"
%
(
suite
))
while
True
:
r
=
cursor
.
fetchone
()
if
not
r
:
break
if
r
[
1
]
!=
"source"
and
r
[
1
]
!=
"all"
:
arch_list
.
append
((
r
[
0
],
r
[
1
]))
return
arch_list
################################################################################
def
main
():
cnf
=
Config
()
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录