Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
喜羊羊3508
Dak
提交
5c4242ac
D
Dak
项目概览
喜羊羊3508
/
Dak
10 个月 前同步成功
通知
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 搜索 >>
提交
5c4242ac
编写于
3月 13, 2009
作者:
M
Mike O'Connor
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fixing Binary.reject. adding better logging when we get an error in contents insertion
Signed-off-by:
N
Mike O'Connor
<
stew@vireo.org
>
上级
111909f3
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
112 addition
and
38 deletion
+112
-38
dak/contents.py
dak/contents.py
+5
-2
dak/process_unchecked.py
dak/process_unchecked.py
+1
-1
daklib/binary.py
daklib/binary.py
+74
-11
daklib/dbconn.py
daklib/dbconn.py
+32
-24
未找到文件。
dak/contents.py
浏览文件 @
5c4242ac
...
...
@@ -178,6 +178,9 @@ class Contents(object):
def
__init__
(
self
):
self
.
header
=
None
def
reject
(
self
,
message
):
log
.
error
(
"E: %s"
%
message
)
def
_getHeader
(
self
):
"""
Internal method to return the header for Contents.gz files
...
...
@@ -226,7 +229,7 @@ class Contents(object):
return
num_tabs
=
max
(
1
,
int
(
math
.
ceil
((
self
.
_goal_column
-
len
(
contents
[
0
]))
/
8
)))
int
(
math
.
ceil
((
self
.
_goal_column
-
len
(
contents
[
0
])
-
1
)
/
8
)))
f
.
write
(
contents
[
0
]
+
(
'
\t
'
*
num_tabs
)
+
contents
[
-
1
]
+
"
\n
"
)
finally
:
...
...
@@ -279,7 +282,7 @@ class Contents(object):
else
:
debfile
=
os
.
path
.
join
(
pooldir
,
deb
[
1
]
)
if
os
.
path
.
exists
(
debfile
):
Binary
(
debfile
).
scan_package
(
deb
[
0
]
)
Binary
(
debfile
,
self
.
reject
).
scan_package
(
deb
[
0
]
)
else
:
log
.
error
(
"missing .deb: %s"
%
deb
[
1
]
)
...
...
dak/process_unchecked.py
浏览文件 @
5c4242ac
...
...
@@ -572,7 +572,7 @@ def check_files():
# Check the version and for file overwrites
reject
(
Upload
.
check_binary_against_db
(
f
),
""
)
Binary
(
f
).
scan_package
(
)
Binary
(
f
,
reject
).
scan_package
(
)
# Checks for a source package...
else
:
...
...
daklib/binary.py
浏览文件 @
5c4242ac
...
...
@@ -40,6 +40,7 @@ Functions related debian binary packages
################################################################################
import
os
import
sys
import
shutil
import
tempfile
import
tarfile
...
...
@@ -48,12 +49,33 @@ import traceback
import
atexit
from
debian_bundle
import
deb822
from
dbconn
import
DBConn
from
config
import
Config
import
logging
import
utils
class
Binary
(
object
):
def
__init__
(
self
,
filename
):
def
__init__
(
self
,
filename
,
reject
=
None
):
"""
@ptype filename: string
@param filename: path of a .deb
@ptype reject: function
@param reject: a function to log reject messages to
"""
self
.
filename
=
filename
self
.
tmpdir
=
None
self
.
chunks
=
None
self
.
wrapped_reject
=
reject
def
reject
(
self
,
message
):
"""
if we were given a reject function, send the reject message,
otherwise send it to stderr.
"""
if
self
.
wrapped_reject
:
self
.
wrapped_reject
(
message
)
else
:
print
>>
sys
.
stderr
,
message
def
__del__
(
self
):
"""
...
...
@@ -74,12 +96,11 @@ class Binary(object):
if
not
self
.
chunks
:
cmd
=
"ar t %s"
%
(
self
.
filename
)
(
result
,
output
)
=
commands
.
getstatusoutput
(
cmd
)
if
result
!=
0
:
rejected
=
True
reject
(
"%s: 'ar t' invocation failed."
%
(
self
.
filename
))
reject
(
utils
.
prefix_multi_line_string
(
output
,
" [ar output:] "
),
""
)
self
.
reject
(
"%s: 'ar t' invocation failed."
%
(
self
.
filename
))
self
.
reject
(
utils
.
prefix_multi_line_string
(
output
,
" [ar output:] "
),
""
)
self
.
chunks
=
output
.
split
(
'
\n
'
)
...
...
@@ -96,8 +117,8 @@ class Binary(object):
cmd
=
"ar x %s %s %s"
%
(
os
.
path
.
join
(
cwd
,
self
.
filename
),
self
.
chunks
[
1
],
self
.
chunks
[
2
])
(
result
,
output
)
=
commands
.
getstatusoutput
(
cmd
)
if
result
!=
0
:
reject
(
"%s: '%s' invocation failed."
%
(
filename
,
cmd
))
reject
(
utils
.
prefix_multi_line_string
(
output
,
" [ar output:] "
),
""
)
self
.
reject
(
"%s: '%s' invocation failed."
%
(
self
.
filename
,
cmd
))
self
.
reject
(
utils
.
prefix_multi_line_string
(
output
,
" [ar output:] "
)
)
else
:
self
.
tmpdir
=
tmpdir
atexit
.
register
(
self
.
_cleanup
)
...
...
@@ -117,16 +138,16 @@ class Binary(object):
rejected
=
not
self
.
chunks
if
len
(
self
.
chunks
)
!=
3
:
rejected
=
True
reject
(
"%s: found %d chunks, expected 3."
%
(
self
.
filename
,
len
(
self
.
chunks
)))
self
.
reject
(
"%s: found %d chunks, expected 3."
%
(
self
.
filename
,
len
(
self
.
chunks
)))
if
self
.
chunks
[
0
]
!=
"debian-binary"
:
rejected
=
True
reject
(
"%s: first chunk is '%s', expected 'debian-binary'."
%
(
self
.
filename
,
self
.
chunks
[
0
]))
self
.
reject
(
"%s: first chunk is '%s', expected 'debian-binary'."
%
(
self
.
filename
,
self
.
chunks
[
0
]))
if
self
.
chunks
[
1
]
!=
"control.tar.gz"
:
rejected
=
True
reject
(
"%s: second chunk is '%s', expected 'control.tar.gz'."
%
(
self
.
filename
,
self
.
chunks
[
1
]))
self
.
reject
(
"%s: second chunk is '%s', expected 'control.tar.gz'."
%
(
self
.
filename
,
self
.
chunks
[
1
]))
if
self
.
chunks
[
2
]
not
in
[
"data.tar.bz2"
,
"data.tar.gz"
]:
rejected
=
True
reject
(
"%s: third chunk is '%s', expected 'data.tar.gz' or 'data.tar.bz2'."
%
(
self
.
filename
,
self
.
chunks
[
2
]))
self
.
reject
(
"%s: third chunk is '%s', expected 'data.tar.gz' or 'data.tar.bz2'."
%
(
self
.
filename
,
self
.
chunks
[
2
]))
return
not
rejected
...
...
@@ -150,8 +171,8 @@ class Binary(object):
result
=
False
cwd
=
os
.
getcwd
()
if
not
rejected
and
self
.
tmpdir
:
cwd
=
os
.
getcwd
()
try
:
os
.
chdir
(
self
.
tmpdir
)
if
self
.
chunks
[
1
]
==
"control.tar.gz"
:
...
...
@@ -175,6 +196,48 @@ class Binary(object):
os
.
chdir
(
cwd
)
return
result
def
check_utf8_package
(
self
,
package
):
"""
Unpack the .deb, do sanity checking, and gather info from it.
Currently information gathering consists of getting the contents list. In
the hopefully near future, it should also include gathering info from the
control file.
@ptype bootstrap_id: int
@param bootstrap_id: the id of the binary these packages
should be associated or zero meaning we are not bootstrapping
so insert into a temporary table
@return True if the deb is valid and contents were imported
"""
rejected
=
not
self
.
valid_deb
()
self
.
__unpack
()
if
not
rejected
and
self
.
tmpdir
:
cwd
=
os
.
getcwd
()
try
:
os
.
chdir
(
self
.
tmpdir
)
if
self
.
chunks
[
1
]
==
"control.tar.gz"
:
control
=
tarfile
.
open
(
os
.
path
.
join
(
self
.
tmpdir
,
"control.tar.gz"
),
"r:gz"
)
control
.
extract
(
'control'
,
self
.
tmpdir
)
if
self
.
chunks
[
2
]
==
"data.tar.gz"
:
data
=
tarfile
.
open
(
os
.
path
.
join
(
self
.
tmpdir
,
"data.tar.gz"
),
"r:gz"
)
elif
self
.
chunks
[
2
]
==
"data.tar.bz2"
:
data
=
tarfile
.
open
(
os
.
path
.
join
(
self
.
tmpdir
,
"data.tar.bz2"
),
"r:bz2"
)
for
tarinfo
in
data
:
try
:
unicode
(
tarinfo
.
name
)
except
:
print
>>
sys
.
stderr
,
"E: %s has non-unicode filename: %s"
%
(
package
,
tarinfo
.
name
)
except
:
traceback
.
print_exc
()
result
=
False
os
.
chdir
(
cwd
)
if
__name__
==
"__main__"
:
Binary
(
"/srv/ftp.debian.org/queue/accepted/halevt_0.1.3-2_amd64.deb"
).
scan_package
()
daklib/dbconn.py
浏览文件 @
5c4242ac
...
...
@@ -413,18 +413,22 @@ class DBConn(Singleton):
@rtype: int
@return: the database id for the given component
"""
values
=
{
'value'
:
filename
}
query
=
"SELECT id FROM content_file_names WHERE file = %(value)s"
id
=
self
.
__get_single_id
(
query
,
values
,
cachename
=
'content_file_names'
)
if
not
id
:
c
=
self
.
db_con
.
cursor
()
c
.
execute
(
"INSERT INTO content_file_names VALUES (DEFAULT, %(value)s) RETURNING id"
,
values
)
id
=
c
.
fetchone
()[
0
]
self
.
caches
[
'content_file_names'
].
SetValue
(
values
,
id
)
return
id
try
:
values
=
{
'value'
:
filename
}
query
=
"SELECT id FROM content_file_names WHERE file = %(value)s"
id
=
self
.
__get_single_id
(
query
,
values
,
cachename
=
'content_file_names'
)
if
not
id
:
c
=
self
.
db_con
.
cursor
()
c
.
execute
(
"INSERT INTO content_file_names VALUES (DEFAULT, %(value)s) RETURNING id"
,
values
)
id
=
c
.
fetchone
()[
0
]
self
.
caches
[
'content_file_names'
].
SetValue
(
values
,
id
)
return
id
except
:
traceback
.
print_exc
()
raise
def
get_or_set_contents_path_id
(
self
,
path
):
"""
...
...
@@ -439,18 +443,22 @@ class DBConn(Singleton):
@rtype: int
@return: the database id for the given component
"""
values
=
{
'value'
:
path
}
query
=
"SELECT id FROM content_file_paths WHERE path = %(value)s"
id
=
self
.
__get_single_id
(
query
,
values
,
cachename
=
'content_path_names'
)
if
not
id
:
c
=
self
.
db_con
.
cursor
()
c
.
execute
(
"INSERT INTO content_file_paths VALUES (DEFAULT, %(value)s) RETURNING id"
,
values
)
id
=
c
.
fetchone
()[
0
]
self
.
caches
[
'content_path_names'
].
SetValue
(
values
,
id
)
return
id
try
:
values
=
{
'value'
:
path
}
query
=
"SELECT id FROM content_file_paths WHERE path = %(value)s"
id
=
self
.
__get_single_id
(
query
,
values
,
cachename
=
'content_path_names'
)
if
not
id
:
c
=
self
.
db_con
.
cursor
()
c
.
execute
(
"INSERT INTO content_file_paths VALUES (DEFAULT, %(value)s) RETURNING id"
,
values
)
id
=
c
.
fetchone
()[
0
]
self
.
caches
[
'content_path_names'
].
SetValue
(
values
,
id
)
return
id
except
:
traceback
.
print_exc
()
raise
def
get_suite_architectures
(
self
,
suite
):
"""
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录