]> git.donarmstrong.com Git - dak.git/blobdiff - daklib/archive.py
daklib/dbconn.py: allow use with SQLAlchemy 0.8
[dak.git] / daklib / archive.py
index ca58da87a2858917fda4387173f54fde3796d396..410e9cabd7eabbcdc2d2ac243ed45faf0edc088f 100644 (file)
@@ -636,8 +636,9 @@ class ArchiveUpload(object):
         cnf = Config()
         session = self.transaction.session
 
+        group = cnf.get('Dinstall::UnprivGroup') or None
         self.directory = utils.temp_dirname(parent=cnf.get('Dir::TempPath'),
-                                            mode=0o2750, group=cnf.unprivgroup)
+                                            mode=0o2750, group=group)
         with FilesystemTransaction() as fs:
             src = os.path.join(self.original_directory, self.original_changes.filename)
             dst = os.path.join(self.directory, self.original_changes.filename)
@@ -652,7 +653,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)
@@ -661,7 +668,7 @@ class ArchiveUpload(object):
                         try:
                             db_file = self.transaction.get_file(f, source.dsc['Source'], check_hashes=False)
                             db_archive_file = session.query(ArchiveFile).filter_by(file=db_file).first()
-                            fs.copy(db_archive_file.path, dst, symlink=True)
+                            fs.copy(db_archive_file.path, dst, mode=0o640)
                         except KeyError:
                             # Ignore if get_file could not find it. Upload will
                             # probably be rejected later.
@@ -711,7 +718,7 @@ class ArchiveUpload(object):
             elif rtype == "reject":
                 rejected = fields[1]
                 if suite_name == rejected:
-                    self.reject_reasons.append('Uploads to {0} are not accepted.'.format(suite))
+                    raise checks.Reject('Uploads to {0} are not accepted.'.format(rejected))
             ## XXX: propup-version and map-unreleased not yet implemented
         return suite_name
 
@@ -881,9 +888,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,
@@ -1055,14 +1061,26 @@ class ArchiveUpload(object):
 
         remaining = []
         for f in byhand:
-            parts = f.filename.split('_', 2)
-            if len(parts) != 3:
-                print "W: unexpected byhand filename {0}. No automatic processing.".format(f.filename)
-                remaining.append(f)
-                continue
+            if '_' in f.filename:
+                parts = f.filename.split('_', 2)
+                if len(parts) != 3:
+                    print "W: unexpected byhand filename {0}. No automatic processing.".format(f.filename)
+                    remaining.append(f)
+                    continue
+
+                package, version, archext = parts
+                arch, ext = archext.split('.', 1)
+            else:
+                parts = f.filename.split('.')
+                if len(parts) < 2:
+                    print "W: unexpected byhand filename {0}. No automatic processing.".format(f.filename)
+                    remaining.append(f)
+                    continue
 
-            package, version, archext = parts
-            arch, ext = archext.split('.', 1)
+                package = parts[0]
+                version = '0'
+                arch = 'all'
+                ext = parts[-1]
 
             try:
                 rule = automatic_byhand_packages.subtree(package)
@@ -1070,7 +1088,9 @@ class ArchiveUpload(object):
                 remaining.append(f)
                 continue
 
-            if rule['Source'] != self.changes.source_name or rule['Section'] != f.section or rule['Extension'] != ext:
+            if rule['Source'] != self.changes.source_name \
+                    or rule['Section'] != f.section \
+                    or ('Extension' in rule and rule['Extension'] != ext):
                 remaining.append(f)
                 continue