[dak/master] HashedFile: Raise FileDoesNotExist if referring to a non-existing file
A custom exception is nicer to handle in the caller.
---
daklib/checks.py | 14 ++++++--------
daklib/upload.py | 21 ++++++++++++++++-----
2 files changed, 22 insertions(+), 13 deletions(-)
diff --git a/daklib/checks.py b/daklib/checks.py
index 4368273..c7c4a16 100644
--- a/daklib/checks.py
+++ b/daklib/checks.py
@@ -31,7 +31,7 @@ from daklib.regexes import *
from daklib.textutils import fix_maintainer, ParseMaintError
import daklib.lintian as lintian
import daklib.utils as utils
-from daklib.upload import InvalidHashException
+import daklib.upload
import apt_inst
import apt_pkg
@@ -160,13 +160,11 @@ class SignatureAndHashesCheck(Check):
try:
for f in files:
f.check(upload.directory)
- except IOError as e:
- if e.errno == errno.ENOENT:
- raise Reject('{0} refers to non-existing file: {1}\n'
- 'Perhaps you need to include it in your upload?'
- .format(filename, os.path.basename(e.filename)))
- raise
- except InvalidHashException as e:
+ except daklib.upload.FileDoesNotExist as e:
+ raise Reject('{0}: {1}\n'
+ 'Perhaps you need to include the file in your upload?'
+ .format(filename, unicode(e)))
+ except daklib.upload.UploadException as e:
raise Reject('{0}: {1}'.format(filename, unicode(e)))
class ChangesCheck(Check):
diff --git a/daklib/upload.py b/daklib/upload.py
index 9c17b94..76939bd 100644
--- a/daklib/upload.py
+++ b/daklib/upload.py
@@ -63,6 +63,12 @@ class InvalidFilenameException(UploadException):
def __str__(self):
return "Invalid filename '{0}'.".format(self.filename)
+class FileDoesNotExist(UploadException):
+ def __init__(self, filename):
+ self.filename = filename
+ def __str__(self):
+ return "Refers to non-existing file '{0}'".format(self.filename)
+
class HashedFile(object):
"""file with checksums
"""
@@ -124,8 +130,8 @@ class HashedFile(object):
@return: C{HashedFile} object for the given file
"""
path = os.path.join(directory, filename)
- size = os.stat(path).st_size
with open(path, 'r') as fh:
+ size = os.fstat(fh.fileno()).st_size
hashes = apt_pkg.Hashes(fh)
return cls(filename, size, hashes.md5, hashes.sha1, hashes.sha256, section, priority)
@@ -141,13 +147,18 @@ class HashedFile(object):
"""
path = os.path.join(directory, self.filename)
- size = os.stat(path).st_size
+ try:
+ with open(path) as fh:
+ size = os.fstat(fh.fileno()).st_size
+ hashes = apt_pkg.Hashes(fh)
+ except IOError as e:
+ if e.errno == errno.ENOENT:
+ raise FileDoesNotExist(self.filename)
+ raise
+
if size != self.size:
raise InvalidHashException(self.filename, 'size', self.size, size)
- with open(path) as fh:
- hashes = apt_pkg.Hashes(fh)
-
if hashes.md5 != self.md5sum:
raise InvalidHashException(self.filename, 'md5sum', self.md5sum, hashes.md5)
--
1.7.10.4
Reply to: