X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Fgenerate_releases.py;h=c359177235810258910b788ea09a85857ebc9cfe;hb=17c5cab4eb8d5181ec7a81267a4e2e6b43c0fc65;hp=e483e6c22bba3f977e96d3491bffa302fce10dbc;hpb=1eeb90f6bf381e10fcd8f0a04437883b443855d5;p=dak.git diff --git a/dak/generate_releases.py b/dak/generate_releases.py index e483e6c2..c3591772 100755 --- a/dak/generate_releases.py +++ b/dak/generate_releases.py @@ -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) @@ -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,9 +137,11 @@ class ReleaseWriter(object): # fill them in attribs = ( ('Origin', 'origin'), ('Label', 'label'), - ('Suite', 'suite_name'), + ('Suite', 'release_suite_output'), ('Version', 'version'), - ('Codename', 'codename') ) + ('Codename', 'codename'), + ('Changelogs', 'changelog_url'), + ) # A "Sub" Release file has slightly different fields subattribs = ( ('Archive', 'suite_name'), @@ -147,16 +161,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 in ("Version", "Changelogs") 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())))) @@ -214,9 +224,8 @@ class ReleaseWriter(object): os.chdir(os.path.join(suite.archive.path, "dists", suite.suite_name, suite_suffix)) - hashfuncs = { 'MD5Sum' : apt_pkg.md5sum, - 'SHA1' : apt_pkg.sha1sum, - 'SHA256' : apt_pkg.sha256sum } + hashfuncs = dict(zip([x.upper().replace('UM', 'um') for x in suite.checksums], + [getattr(apt_pkg, "%s" % (x)) for x in [x.replace("sum", "") + "sum" for x in suite.checksums]])) fileinfo = {} @@ -238,10 +247,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 +262,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] = {}