]> git.decadent.org.uk Git - dak.git/blobdiff - ziyi
fix to match new katie.conf format
[dak.git] / ziyi
diff --git a/ziyi b/ziyi
index 4ce3956ca3bda6352c0d244775f5012cc8a2f8c3..bd08efc05e7240e32612fa2008d4c5f1930a9ea9 100755 (executable)
--- a/ziyi
+++ b/ziyi
@@ -2,8 +2,8 @@
 
 # Create all the Release files
 
-# Copyright (C) 2001  Anthony Towns <ajt@debian.org>
-# $Id: ziyi,v 1.11 2001-11-24 18:44:14 troup Exp $
+# Copyright (C) 2001, 2002  Anthony Towns <ajt@debian.org>
+# $Id: ziyi,v 1.20 2002-05-15 05:43:34 ajt Exp $
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
@@ -23,8 +23,8 @@
 
 ################################################################################
 
-import pg, sys, os, stat, string, time
-import utils, db_access
+import sys, os, popen2, tempfile, stat, string, time
+import utils
 import apt_pkg
 
 ################################################################################
@@ -47,42 +47,66 @@ Generate Release files.
 def compressnames (tree,type,file):
     compress = AptCnf.get("%s::%s::Compress" % (tree,type), AptCnf.get("Default::%s::Compress" % (type), ". gzip"))
     result = []
+    cl = string.split(compress)
+    uncompress = ("." not in cl)
     for mode in string.split(compress):
        if mode == ".":
            result.append(file)
        elif mode == "gzip":
+           if uncompress:
+               result.append("<zcat/.gz>" + file)
+               uncompress = 0
            result.append(file + ".gz")
        elif mode == "bzip2":
+           if uncompress:
+               result.append("<bzcat/.bz2>" + file)
+               uncompress = 0
            result.append(file + ".bz2")
     return result
 
-def print_md5_files (tree, files):
-    path = Cnf["Dir::RootDir"] + tree + "/"
+def create_temp_file (cmd):
+    f = tempfile.TemporaryFile()
+    r = popen2.popen2(cmd)
+    r[1].close()
+    r = r[0]
+    size = 0
+    while 1:
+       x = r.readline()
+       if not x:
+           r.close()
+           del x,r
+           break
+       f.write(x)
+       size = size + len(x)
+    f.flush()
+    f.seek(0)
+    return (size, f)
+
+def print_md5sha_files (tree, files, hashop):
+    path = Cnf["Dir::Root"] + tree + "/"
     for name in files:
         try:
-            file_handle = utils.open_file(path + name)
+           if name[0] == "<":
+               j = string.index(name, "/")
+               k = string.index(name, ">")
+               (cat, ext, name) = (name[1:j], name[j+1:k], name[k+1:])
+               (size, file_handle) = create_temp_file("%s %s%s%s" %
+                   (cat, path, name, ext))
+           else:
+               size = os.stat(path + name)[stat.ST_SIZE]
+                       file_handle = utils.open_file(path + name)
         except utils.cant_open_exc:
             print "ALERT: Couldn't open " + path + name
         else:
-           md5 = apt_pkg.md5sum(file_handle)
+           hash = hashop(file_handle)
            file_handle.close()
+           out.write(" %s         %8d %s\n" % (hash, size, name))
 
-        size = os.stat(path + name)[stat.ST_SIZE]
-        out.write(" %s         %8d %s\n" % (md5, size, name))
+def print_md5_files (tree, files):
+    print_md5sha_files (tree, files, apt_pkg.md5sum)
 
 def print_sha1_files (tree, files):
-    path = Cnf["Dir::RootDir"] + tree + "/"
-    for name in files:
-        try:
-            file_handle = utils.open_file(path + name)
-        except utils.cant_open_exc:
-            print "ALERT: Couldn't open " + path + name
-        else:
-           sha1 = apt_pkg.sha1sum(file_handle)
-           file_handle.close()
-
-        size = os.stat(path + name)[stat.ST_SIZE]
-        out.write(" %s %8d %s\n" % (sha1, size, name))
+    print_md5sha_files (tree, files, apt_pkg.sha1sum)
 
 ################################################################################
 
@@ -133,19 +157,28 @@ def main ():
            notautomatic = ""
 
        if SuiteBlock.has_key("Components"):
-           components = SuiteBlock.SubTree("Components").List()
+           components = SuiteBlock.ValueList("Components")
        else:
            components = []
 
        nonus = 1
-       if components != []:
+       if components:
            for c in components:
                if string.find(c, "non-US/") != 0:
                    nonus = 0
        else:
            nonus = 0
+
+       if not nonus and  string.find(codename, "/updates") > 0:
+           security = 1
+       else:
+           security = 0
+
        if nonus:
            longsuite = suite + "/non-US"
+       elif security:
+           suite = suite + "/updates"
+           longsuite = suite
        else:
            longsuite = suite
 
@@ -159,8 +192,8 @@ def main ():
            print "ALERT: suite %s not in apt.conf, nor untouchable!" % (suite)
            continue
 
-       print Cnf["Dir::RootDir"] + tree + "/Release"
-       out = open(Cnf["Dir::RootDir"] + tree + "/Release", "w")
+       print Cnf["Dir::Root"] + tree + "/Release"
+       out = open(Cnf["Dir::Root"] + tree + "/Release", "w")
 
        out.write("Origin: %s\n" % (origin))
        out.write("Label: %s\n" % (label))
@@ -172,8 +205,8 @@ def main ():
        out.write("Date: %s\n" % (time.strftime("%a, %d %b %Y %H:%M:%S UTC", time.gmtime(time.time()))))
        if notautomatic != "":
            out.write("NotAutomatic: %s\n" % (notautomatic))
-       out.write("Architectures: %s\n" % (string.join(filter(real_arch, SuiteBlock.SubTree("Architectures").List()))))
-       if components != []:
+       out.write("Architectures: %s\n" % (string.join(filter(real_arch, SuiteBlock.ValueList("Architectures")))))
+       if components:
             out.write("Components: %s\n" % (string.join(components)))
 
        out.write("Description: %s\n" % (SuiteBlock["Description"]))
@@ -188,7 +221,7 @@ def main ():
                            files.append(file)
                    else:
                        disks = "%s/disks-%s" % (sec, arch)
-                       diskspath = Cnf["Dir::RootDir"]+tree+"/"+disks
+                       diskspath = Cnf["Dir::Root"]+tree+"/"+disks
                        if os.path.exists(diskspath):
                            for dir in os.listdir(diskspath):
                                if os.path.exists("%s/%s/md5sum.txt" % (diskspath, dir)):
@@ -201,10 +234,11 @@ def main ():
                        rel = "%s/%s/Release" % (sec, arch)
                    else:
                        rel = "%s/binary-%s/Release" % (sec, arch)
-                   relpath = Cnf["Dir::RootDir"]+tree+"/"+rel
+                   relpath = Cnf["Dir::Root"]+tree+"/"+rel
 
                    if os.path.exists(relpath):
                        try:
+                           os.unlink(relpath)
                            release = open(relpath, "w")
                            #release = open(string.replace(longsuite,"/","_") + "_" + arch + "_" + sec + "_Release", "w")
                        except IOError:
@@ -250,11 +284,26 @@ def main ():
 
        out.close()
        if Cnf.has_key("Dinstall::SigningKeyring"):
-           dest = Cnf["Dir::RootDir"] + tree + "/Release.gpg"
+           keyring = "--secret-keyring \"%s\"" % Cnf["Dinstall::SigningKeyring"]
+           if Cnf.has_key("Dinstall::SigningPubKeyring"):
+               keyring = keyring + " --keyring \"%s\"" % Cnf["Dinstall::SigningPubKeyring"]
+
+           arguments = "--no-options --batch --no-tty --armour"
+           if Cnf.has_key("Dinstall::SigningKeyIds"):
+               signkeyids = string.split(Cnf["Dinstall::SigningKeyIds"])
+           else:
+               signkeyids = [""]
+
+           dest = Cnf["Dir::Root"] + tree + "/Release.gpg"
            if os.path.exists(dest):
-                os.unlink(dest)
-           os.system("gpg --secret-keyring \"%s\" --no-options --batch --no-tty --armour --detach-sign <%s --output=%s" % (Cnf["Dinstall::SigningKeyring"],
-               Cnf["Dir::RootDir"] + tree + "/Release", dest))
+               os.unlink(dest)
+
+           for keyid in signkeyids:
+               if keyid != "": defkeyid = "--default-key %s" % keyid
+               else: defkeyid = ""
+               os.system("gpg %s %s %s --detach-sign <%s >>%s" %
+                       (keyring, defkeyid, arguments,
+                       Cnf["Dir::Root"] + tree + "/Release", dest))
 
 #######################################################################################