X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=daklib%2Fupload.py;h=cabec15116ad898e78a8d48f7ab2743fd2735b07;hb=1eeb90f6bf381e10fcd8f0a04437883b443855d5;hp=3d63c71e5345eec9d5c6535216a5effd5da4200b;hpb=11b25f20ef4be9493992b96dd7006ed7ca26bdd8;p=dak.git diff --git a/daklib/upload.py b/daklib/upload.py index 3d63c71e..cabec151 100644 --- a/daklib/upload.py +++ b/daklib/upload.py @@ -45,7 +45,13 @@ class InvalidHashException(Exception): self.expected = expected self.actual = actual def __str__(self): - return "Invalid {0} hash for {1}: expected {2}, but got {3}.".format(self.hash_name, self.filename, self.expected, self.actual) + return ("Invalid {0} hash for {1}:\n" + "According to the control file the {0} hash should be {2},\n" + "but {1} has {3}.\n" + "\n" + "If you did not include {1} in you upload, a different version\n" + "might already be known to the archive software.") \ + .format(self.hash_name, self.filename, self.expected, self.actual) class InvalidFilenameException(Exception): def __init__(self, filename): @@ -167,7 +173,7 @@ def parse_file_list(control, has_priority_and_section): """ entries = {} - for line in control["Files"].split('\n'): + for line in control.get("Files", "").split('\n'): if len(line) == 0: continue @@ -180,23 +186,25 @@ def parse_file_list(control, has_priority_and_section): entries[filename] = entry - for line in control["Checksums-Sha1"].split('\n'): + for line in control.get("Checksums-Sha1", "").split('\n'): if len(line) == 0: continue (sha1sum, size, filename) = line.split() entry = entries.get(filename, None) - if entry.get('size', None) != long(size): + if entry is None: + raise InvalidChangesException('{0} is listed in Checksums-Sha1, but not in Files.'.format(filename)) + if entry is not None and entry.get('size', None) != long(size): raise InvalidChangesException('Size for {0} in Files and Checksum-Sha1 fields differ.'.format(filename)) entry['sha1sum'] = sha1sum - for line in control["Checksums-Sha256"].split('\n'): + for line in control.get("Checksums-Sha256", "").split('\n'): if len(line) == 0: continue (sha256sum, size, filename) = line.split() entry = entries.get(filename, None) if entry is None: - raise InvalidChangesException('No sha256sum for {0}.'.format(filename)) - if entry.get('size', None) != long(size): + raise InvalidChangesException('{0} is listed in Checksums-Sha256, but not in Files.'.format(filename)) + if entry is not None and entry.get('size', None) != long(size): raise InvalidChangesException('Size for {0} in Files and Checksum-Sha256 fields differ.'.format(filename)) entry['sha256sum'] = sha256sum @@ -273,7 +281,7 @@ class Changes(object): """list of architectures included in the upload @type: list of str """ - return self.changes['Architecture'].split() + return self.changes.get('Architecture', '').split() @property def distributions(self): @@ -296,6 +304,13 @@ class Changes(object): self._source = Source(self.directory, source_files, self._keyrings, self._require_signature) return self._source + @property + def sourceful(self): + """C{True} if the upload includes source + @type: bool + """ + return "source" in self.architectures + @property def source_name(self): """source package name