]> git.decadent.org.uk Git - dak.git/blobdiff - dak/generate_releases.py
Adjust to deal with the new Debian supplementaryGid
[dak.git] / dak / generate_releases.py
index a86c33ce33090def79074f93bbd80135030f0f43..2814b24a61b7ea78eea776367fe518d7fbf1d6dd 100755 (executable)
@@ -38,6 +38,7 @@ import time
 import gzip
 import bz2
 import apt_pkg
+import subprocess
 from tempfile import mkstemp, mkdtemp
 import commands
 from sqlalchemy.orm import object_session
@@ -48,6 +49,7 @@ from daklib.dak_exceptions import *
 from daklib.dbconn import *
 from daklib.config import Config
 from daklib.dakmultiprocessing import DakProcessPool, PROC_STATUS_SUCCESS
+import daklib.daksubprocess
 
 ################################################################################
 Logger = None                  #: Our logging object
@@ -68,7 +70,7 @@ Generate the Release files
   -h, --help                 show this help and exit
   -q, --quiet                Don't output progress
 
-SUITE can be a space seperated list, e.g.
+SUITE can be a space separated list, e.g.
    --suite=unstable testing
   """
     sys.exit(exit_code)
@@ -83,7 +85,7 @@ def sign_release_dir(suite, dirname):
         if cnf.has_key("Dinstall::SigningPubKeyring"):
             keyring += " --keyring \"%s\"" % cnf["Dinstall::SigningPubKeyring"]
 
-        arguments = "--no-options --batch --no-tty --armour"
+        arguments = "--no-options --batch --no-tty --armour --personal-digest-preferences=SHA256"
 
         relname = os.path.join(dirname, 'Release')
 
@@ -104,6 +106,16 @@ def sign_release_dir(suite, dirname):
         os.system("gpg %s %s %s --clearsign <%s >>%s" %
                   (keyring, defkeyid, arguments, relname, inlinedest))
 
+class XzFile(object):
+    def __init__(self, filename, mode='r'):
+        self.filename = filename
+    def read(self):
+        cmd = ("xz", "-d")
+        with open(self.filename, 'r') as stdin:
+            process = daklib.daksubprocess.Popen(cmd, stdin=stdin, stdout=subprocess.PIPE)
+            (stdout, stderr) = process.communicate()
+            return stdout
+
 class ReleaseWriter(object):
     def __init__(self, suite):
         self.suite = suite
@@ -125,7 +137,7 @@ class ReleaseWriter(object):
         # fill them in
         attribs = ( ('Origin',      'origin'),
                     ('Label',       'label'),
-                    ('Suite',       'suite_name'),
+                    ('Suite',       'release_suite_output'),
                     ('Version',     'version'),
                     ('Codename',    'codename') )
 
@@ -147,16 +159,12 @@ class ReleaseWriter(object):
         out = open(outfile + ".new", "w")
 
         for key, dbfield in attribs:
-            if getattr(suite, dbfield) is not None:
-                # TEMPORARY HACK HACK HACK until we change the way we store the suite names etc
-                if key == 'Suite' and getattr(suite, dbfield) == 'squeeze-updates':
-                    out.write("Suite: oldstable-updates\n")
-                elif key == 'Suite' and getattr(suite, dbfield) == 'wheezy-updates':
-                    out.write("Suite: stable-updates\n")
-                elif key == 'Suite' and getattr(suite, dbfield) == 'jessie-updates':
-                    out.write("Suite: testing-updates\n")
-                else:
-                    out.write("%s: %s\n" % (key, getattr(suite, dbfield)))
+            # Hack to skip NULL Version fields as we used to do this
+            # We should probably just always ignore anything which is None
+            if key == "Version" and getattr(suite, dbfield) is None:
+                continue
+
+            out.write("%s: %s\n" % (key, getattr(suite, dbfield)))
 
         out.write("Date: %s\n" % (time.strftime("%a, %d %b %Y %H:%M:%S UTC", time.gmtime(time.time()))))
 
@@ -238,10 +246,12 @@ class ReleaseWriter(object):
                 # If we find a file for which we have a compressed version and
                 # haven't yet seen the uncompressed one, store the possibility
                 # for future use
-                if entry.endswith(".gz") and entry[:-3] not in uncompnotseen.keys():
+                if entry.endswith(".gz") and filename[:-3] not in uncompnotseen:
                     uncompnotseen[filename[:-3]] = (gzip.GzipFile, filename)
-                elif entry.endswith(".bz2") and entry[:-4] not in uncompnotseen.keys():
+                elif entry.endswith(".bz2") and filename[:-4] not in uncompnotseen:
                     uncompnotseen[filename[:-4]] = (bz2.BZ2File, filename)
+                elif entry.endswith(".xz") and filename[:-3] not in uncompnotseen:
+                    uncompnotseen[filename[:-3]] = (XzFile, filename)
 
                 fileinfo[filename]['len'] = len(contents)
 
@@ -251,12 +261,7 @@ class ReleaseWriter(object):
         for filename, comp in uncompnotseen.items():
             # If we've already seen the uncompressed file, we don't
             # need to do anything again
-            if filename in fileinfo.keys():
-                continue
-
-            # Skip uncompressed Contents files as they're huge, take ages to
-            # checksum and we checksum the compressed ones anyways
-            if os.path.basename(filename).startswith("Contents"):
+            if filename in fileinfo:
                 continue
 
             fileinfo[filename] = {}