]> git.decadent.org.uk Git - dak.git/blobdiff - dak/generate_releases.py
Include {Packages,Sources}.xz indices in Release file.
[dak.git] / dak / generate_releases.py
index e483e6c22bba3f977e96d3491bffa302fce10dbc..ce8f12815009a70a0ea9cb4e77eda77564c197de 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
@@ -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
@@ -242,6 +254,8 @@ class ReleaseWriter(object):
                     uncompnotseen[filename[:-3]] = (gzip.GzipFile, filename)
                 elif entry.endswith(".bz2") and entry[:-4] not in uncompnotseen.keys():
                     uncompnotseen[filename[:-4]] = (bz2.BZ2File, filename)
+                elif entry.endswith(".xz") and entry[:-3] not in uncompnotseen.keys():
+                    uncompnotseen[filename[:-3]] = (XzFile, filename)
 
                 fileinfo[filename]['len'] = len(contents)