提交 3d51abd3 编写于 作者: J Joerg Jaspert

Merge commit 'pkern/master' into merge

* commit 'pkern/master':
  more safety nets when our functions do not do what we expect from them
Signed-off-by: NJoerg Jaspert <joerg@debian.org>
2008-09-07 Philipp Kern <pkern@debian.org>
* daklib/utils.py (check_hash): change the comment and warn
if a file is not found when checking the hashes (i.e. when
it is probably in the pool)
* daklib/utils.py (check_size): do not bail out if the file
is not found, because it may be in the pool
* dak/process_accepted.py (install): bail out and skip the
upload when ensure_hashes fails, print the rejection messages
as warnings
2008-08-28 Philipp Kern <pkern@debian.org>
* daklib/utils.py (check_hashes): adapt to different API, check
......
......@@ -274,9 +274,13 @@ def install ():
# Begin a transaction; if we bomb out anywhere between here and the COMMIT WORK below, the DB will not be changed.
projectB.query("BEGIN WORK")
# Check the hashes are all present: HACK: Can go away once all dak files
# are known to be newer than the shasum changes
utils.ensure_hashes(changes, dsc, files, dsc_files)
# Ensure that we have all the hashes we need below.
rejmsg = utils.ensure_hashes(changes, dsc, files, dsc_files)
if len(rejmsg) > 0:
# There were errors. Print them and SKIP the changes.
for msg in rejmsg:
utils.warn(msg)
return
# Add the .dsc file to the DB
for file in files.keys():
......
......@@ -250,6 +250,7 @@ def check_hash(where, files, hashname, hashfunc):
rejmsg = []
for f in files.keys():
file_handle = None
try:
file_handle = open_file(f)
......@@ -264,10 +265,12 @@ def check_hash(where, files, hashname, hashfunc):
rejmsg.append("%s: %s check failed in %s" % (f, hashname,
where))
except CantOpenError:
# XXX: IS THIS THE BLOODY CASE WHEN THE FILE'S IN THE POOL!?
# TODO: This happens when the file is in the pool.
warn("Cannot open file %s" % f)
continue
finally:
file_handle.close()
if file_handle:
file_handle.close()
return rejmsg
################################################################################
......@@ -278,7 +281,15 @@ def check_size(where, files):
rejmsg = []
for f in files.keys():
actual_size = os.stat(f)[stat.ST_SIZE]
try:
entry = os.stat(f)
except OSError, exc:
if exc.errno == 2:
# TODO: This happens when the file is in the pool.
continue
raise
actual_size = entry[stat.ST_SIZE]
size = int(files[f]["size"])
if size != actual_size:
rejmsg.append("%s: actual file size (%s) does not match size (%s) in %s"
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册