]> git.donarmstrong.com Git - dak.git/blobdiff - daklib/archive.py
cruft-report: check for rdeps of arch:all packages on all architectures
[dak.git] / daklib / archive.py
index 2c25e1007dfccaa320e8812a70cecc4e805cfe2b..e2b3a17a5ccf10c6e69d1492d760c6480dab1976 100644 (file)
@@ -33,6 +33,7 @@ import os
 import shutil
 import subprocess
 from sqlalchemy.orm.exc import NoResultFound
+import sqlalchemy.exc
 import tempfile
 import traceback
 
@@ -85,7 +86,7 @@ class ArchiveTransaction(object):
         Will not give an error when the file is already present.
 
         @rtype:  L{daklib.dbconn.PoolFile}
-        @return: batabase object for the new file
+        @return: database object for the new file
         """
         session = self.session
 
@@ -651,7 +652,13 @@ class ArchiveUpload(object):
                     continue
                 fs.copy(src, dst, mode=0o640)
 
-            source = self.changes.source
+            source = None
+            try:
+                source = self.changes.source
+            except Exception:
+                # Do not raise an exception here if the .dsc is invalid.
+                pass
+
             if source is not None:
                 for f in source.files.itervalues():
                     src = os.path.join(self.original_directory, f.filename)
@@ -754,7 +761,7 @@ class ArchiveUpload(object):
         if self.changes.source is not None:
             override = self._source_override(suite, self.changes.source)
             if override is None:
-                self.warnings.append('source:{0} is NEW.'.format(self.changes.source.control['Source']))
+                self.warnings.append('source:{0} is NEW.'.format(self.changes.source.dsc['Source']))
                 new = True
 
         # Check if we reference a file only in a tainted archive
@@ -880,9 +887,8 @@ class ArchiveUpload(object):
         try:
             # Validate signatures and hashes before we do any real work:
             for chk in (
-                    checks.SignatureCheck,
+                    checks.SignatureAndHashesCheck,
                     checks.ChangesCheck,
-                    checks.HashesCheck,
                     checks.ExternalHashesCheck,
                     checks.SourceCheck,
                     checks.BinaryCheck,
@@ -1004,8 +1010,11 @@ class ArchiveUpload(object):
         db_changes.changelog_id = changelog_id
         db_changes.closes = self.changes.closed_bugs
 
-        self.transaction.session.add(db_changes)
-        self.transaction.session.flush()
+        try:
+            self.transaction.session.add(db_changes)
+            self.transaction.session.flush()
+        except sqlalchemy.exc.IntegrityError:
+            raise ArchiveException('{0} is already known.'.format(self.changes.filename))
 
         return db_changes