From: James Troup Date: Fri, 16 Jun 2006 04:43:20 +0000 (+0100) Subject: Initial cleanups and adapted for new dak world order. X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=907deca03b25dc8ce65c89062ff3d7ca7a358976;p=dak Initial cleanups and adapted for new dak world order. --- diff --git a/dak/new_security_install.py b/dak/new_security_install.py index 3d8c6dae..a3508462 100755 --- a/dak/new_security_install.py +++ b/dak/new_security_install.py @@ -1,13 +1,33 @@ #!/usr/bin/env python -import katie, logging, utils, db_access +# Wrapper for Debian Security team +# Copyright (C) 2006 Anthony Towns + +# 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 +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. + +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# General Public License for more details. + +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +# USA + +################################################################################ + +import daklib.queue, daklib.logging, daklib.utils, daklib.database import apt_pkg, os, sys, pwd, time, re, commands re_taint_free = re.compile(r"^['/;\-\+\.\s\w]+$"); Cnf = None Options = None -Katie = None +Upload = None Logger = None advisory = None @@ -15,44 +35,44 @@ changes = [] srcverarches = {} def init(): - global Cnf, Katie, Options, Logger + global Cnf, Upload, Options, Logger - Cnf = utils.get_conf() + Cnf = daklib.utils.get_conf() Cnf["Dinstall::Options::No-Mail"] = "y" - Arguments = [('h', "help", "Amber::Options::Help"), - ('a', "automatic", "Amber::Options::Automatic"), - ('n', "no-action", "Amber::Options::No-Action"), - ('s', "sudo", "Amber::Options::Sudo"), - (' ', "no-upload", "Amber::Options::No-Upload"), - (' ', "drop-advisory", "Amber::Options::Drop-Advisory"), - ('A', "approve", "Amber::Options::Approve"), - ('R', "reject", "Amber::Options::Reject"), - ('D', "disembargo", "Amber::Options::Disembargo") ] + Arguments = [('h', "help", "Security-Install::Options::Help"), + ('a', "automatic", "Security-Install::Options::Automatic"), + ('n', "no-action", "Security-Install::Options::No-Action"), + ('s', "sudo", "Security-Install::Options::Sudo"), + (' ', "no-upload", "Security-Install::Options::No-Upload"), + (' ', "drop-advisory", "Security-Install::Options::Drop-Advisory"), + ('A', "approve", "Security-Install::Options::Approve"), + ('R', "reject", "Security-Install::Options::Reject"), + ('D', "disembargo", "Security-Install::Options::Disembargo") ] for i in Arguments: - Cnf[i[2]] = "" + Cnf[i[2]] = "" arguments = apt_pkg.ParseCommandLine(Cnf, Arguments, sys.argv) - Options = Cnf.SubTree("Amber::Options") + Options = Cnf.SubTree("Security-Install::Options") whoami = os.getuid() whoamifull = pwd.getpwuid(whoami) username = whoamifull[0] - if username != "katie": - print "Non-katie user: %s" % username + if username != "dak": + print "Non-dak user: %s" % username Options["Sudo"] = "y" if Options["Help"]: print "help yourself" - sys.exit(0) + sys.exit(0) if len(arguments) == 0: - utils.fubar("Process what?") + daklib.utils.fubar("Process what?") - Katie = katie.Katie(Cnf) + Upload = daklib.queue.Upload(Cnf) if not Options["Sudo"] and not Options["No-Action"]: - Logger = Katie.Logger = logging.Logger(Cnf, "newamber") + Logger = Upload.Logger = daklib.logging.Logger(Cnf, "new-security-install") return arguments @@ -66,29 +86,29 @@ def load_args(arguments): adv_ids = {} if not arguments[0].endswith(".changes"): - adv_ids [arguments[0]] = 1 - arguments = arguments[1:] + adv_ids [arguments[0]] = 1 + arguments = arguments[1:] null_adv_changes = [] changesfiles = {} for a in arguments: if "/" in a: - utils.fubar("can only deal with files in the current directory") + daklib.utils.fubar("can only deal with files in the current directory") if not a.endswith(".changes"): - utils.fubar("not a .changes file: %s" % (a)) - Katie.init_vars() - Katie.pkg.changes_file = a - Katie.update_vars() - if "adv id" in Katie.pkg.changes: + daklib.utils.fubar("not a .changes file: %s" % (a)) + Upload.init_vars() + Upload.pkg.changes_file = a + Upload.update_vars() + if "adv id" in Upload.pkg.changes: changesfiles[a] = 1 - adv_ids[Katie.pkg.changes["adv id"]] = 1 + adv_ids[Upload.pkg.changes["adv id"]] = 1 else: null_adv_changes.append(a) adv_ids = adv_ids.keys() if len(adv_ids) > 1: - utils.fubar("multiple advisories selected: %s" % (", ".join(adv_ids))) + daklib.utils.fubar("multiple advisories selected: %s" % (", ".join(adv_ids))) if adv_ids == []: advisory = None else: @@ -102,19 +122,19 @@ def load_adv_changes(): for c in os.listdir("."): if not c.endswith(".changes"): continue - Katie.init_vars() - Katie.pkg.changes_file = c - Katie.update_vars() - if "adv id" not in Katie.pkg.changes: - continue - if Katie.pkg.changes["adv id"] != advisory: - continue - - if c not in changes: changes.append(c) - srcver = "%s %s" % (Katie.pkg.changes["source"], - Katie.pkg.changes["version"]) + Upload.init_vars() + Upload.pkg.changes_file = c + Upload.update_vars() + if "adv id" not in Upload.pkg.changes: + continue + if Upload.pkg.changes["adv id"] != advisory: + continue + + if c not in changes: changes.append(c) + srcver = "%s %s" % (Upload.pkg.changes["source"], + Upload.pkg.changes["version"]) srcverarches.setdefault(srcver, {}) - for arch in Katie.pkg.changes["architecture"].keys(): + for arch in Upload.pkg.changes["architecture"].keys(): srcverarches[srcver][arch] = 1 def advisory_info(): @@ -138,9 +158,9 @@ def prompt(opts, default): for o in opts: v[o[0].upper()] = o if o[0] == default: - p += ", [%s]%s" % (o[0], o[1:]) - else: - p += ", " + o + p += ", [%s]%s" % (o[0], o[1:]) + else: + p += ", " + o p = p[2:] + "? " a = None @@ -148,36 +168,36 @@ def prompt(opts, default): a = default while a not in v: - a = utils.our_raw_input(p) + default - a = a[:1].upper() - + a = daklib.utils.our_raw_input(p) + default + a = a[:1].upper() + return v[a] def add_changes(extras): for c in extras: - changes.append(c) - Katie.init_vars() - Katie.pkg.changes_file = c - Katie.update_vars() - srcver = "%s %s" % (Katie.pkg.changes["source"], Katie.pkg.changes["version"]) + changes.append(c) + Upload.init_vars() + Upload.pkg.changes_file = c + Upload.update_vars() + srcver = "%s %s" % (Upload.pkg.changes["source"], Upload.pkg.changes["version"]) srcverarches.setdefault(srcver, {}) - for arch in Katie.pkg.changes["architecture"].keys(): + for arch in Upload.pkg.changes["architecture"].keys(): srcverarches[srcver][arch] = 1 - Katie.pkg.changes["adv id"] = advisory - Katie.dump_vars(os.getcwd()) + Upload.pkg.changes["adv id"] = advisory + Upload.dump_vars(os.getcwd()) def yes_no(prompt): if Options["Automatic"]: return True while 1: - answer = utils.our_raw_input(prompt + " ").lower() - if answer in "yn": - return answer == "y" - print "Invalid answer; please try again." + answer = daklib.utils.our_raw_input(prompt + " ").lower() + if answer in "yn": + return answer == "y" + print "Invalid answer; please try again." def do_upload(): if Options["No-Upload"]: print "Not uploading as requested" - return + return print "Would upload to ftp-master" # XXX @@ -188,50 +208,50 @@ def generate_advisory(template): updated_pkgs = {}; # updated_pkgs[distro][arch][file] = {path,md5,size} for arg in changes: - arg = utils.validate_changes_file_arg(arg) - Katie.pkg.changes_file = arg - Katie.init_vars() - Katie.update_vars() - - src = Katie.pkg.changes["source"] - src_ver = "%s (%s)" % (src, Katie.pkg.changes["version"]) - if src_ver not in adv_packages: - adv_packages.append(src_ver) - - suites = Katie.pkg.changes["distribution"].keys() - for suite in suites: - if not updated_pkgs.has_key(suite): + arg = daklib.utils.validate_changes_file_arg(arg) + Upload.pkg.changes_file = arg + Upload.init_vars() + Upload.update_vars() + + src = Upload.pkg.changes["source"] + src_ver = "%s (%s)" % (src, Upload.pkg.changes["version"]) + if src_ver not in adv_packages: + adv_packages.append(src_ver) + + suites = Upload.pkg.changes["distribution"].keys() + for suite in suites: + if not updated_pkgs.has_key(suite): updated_pkgs[suite] = {} - files = Katie.pkg.files - for file in files.keys(): - arch = files[file]["architecture"] - md5 = files[file]["md5sum"] - size = files[file]["size"] - poolname = Cnf["Dir::PoolRoot"] + \ - utils.poolify(src, files[file]["component"]) - if arch == "source" and file.endswith(".dsc"): - dscpoolname = poolname - for suite in suites: - if not updated_pkgs[suite].has_key(arch): - updated_pkgs[suite][arch] = {} - updated_pkgs[suite][arch][file] = { + files = Upload.pkg.files + for file in files.keys(): + arch = files[file]["architecture"] + md5 = files[file]["md5sum"] + size = files[file]["size"] + poolname = Cnf["Dir::PoolRoot"] + \ + daklib.utils.poolify(src, files[file]["component"]) + if arch == "source" and file.endswith(".dsc"): + dscpoolname = poolname + for suite in suites: + if not updated_pkgs[suite].has_key(arch): + updated_pkgs[suite][arch] = {} + updated_pkgs[suite][arch][file] = { "md5": md5, "size": size, "poolname": poolname } - dsc_files = Katie.pkg.dsc_files - for file in dsc_files.keys(): - arch = "source" - if not dsc_files[file].has_key("files id"): + dsc_files = Upload.pkg.dsc_files + for file in dsc_files.keys(): + arch = "source" + if not dsc_files[file].has_key("files id"): continue - # otherwise, it's already in the pool and needs to be - # listed specially - md5 = dsc_files[file]["md5sum"] - size = dsc_files[file]["size"] - for suite in suites: - if not updated_pkgs[suite].has_key(arch): - updated_pkgs[suite][arch] = {} - updated_pkgs[suite][arch][file] = { + # otherwise, it's already in the pool and needs to be + # listed specially + md5 = dsc_files[file]["md5sum"] + size = dsc_files[file]["size"] + for suite in suites: + if not updated_pkgs[suite].has_key(arch): + updated_pkgs[suite][arch] = {} + updated_pkgs[suite][arch][file] = { "md5": md5, "size": size, "poolname": dscpoolname } if os.environ.has_key("SUDO_UID"): @@ -242,72 +262,72 @@ def generate_advisory(template): username = whoamifull[4].split(",")[0] Subst = { - "__ADVISORY__": advisory, - "__WHOAMI__": username, - "__DATE__": time.strftime("%B %d, %Y", time.gmtime(time.time())), - "__PACKAGE__": ", ".join(adv_packages), - "__KATIE_ADDRESS__": Cnf["Dinstall::MyEmailAddress"] + "__ADVISORY__": advisory, + "__WHOAMI__": username, + "__DATE__": time.strftime("%B %d, %Y", time.gmtime(time.time())), + "__PACKAGE__": ", ".join(adv_packages), + "__DAK_ADDRESS__": Cnf["Dinstall::MyEmailAddress"] } if Cnf.has_key("Dinstall::Bcc"): Subst["__BCC__"] = "Bcc: %s" % (Cnf["Dinstall::Bcc"]) adv = "" - archive = Cnf["Archive::%s::PrimaryMirror" % (utils.where_am_i())] + archive = Cnf["Archive::%s::PrimaryMirror" % (daklib.utils.where_am_i())] for suite in updated_pkgs.keys(): ver = Cnf["Suite::%s::Version" % suite] - if ver != "": ver += " " + if ver != "": ver += " " suite_header = "%s %s(%s)" % (Cnf["Dinstall::MyDistribution"], ver, suite) adv += "%s\n%s\n\n" % (suite_header, "-"*len(suite_header)) - arches = Cnf.ValueList("Suite::%s::Architectures" % suite) - if "source" in arches: + arches = Cnf.ValueList("Suite::%s::Architectures" % suite) + if "source" in arches: arches.remove("source") - if "all" in arches: + if "all" in arches: arches.remove("all") - arches.sort() + arches.sort() - adv += "%s updates are available for %s.\n\n" % ( - suite.capitalize(), utils.join_with_commas_and(arches)) + adv += "%s updates are available for %s.\n\n" % ( + suite.capitalize(), daklib.utils.join_with_commas_and(arches)) - for a in ["source", "all"] + arches: - if not updated_pkgs[suite].has_key(a): + for a in ["source", "all"] + arches: + if not updated_pkgs[suite].has_key(a): continue - if a == "source": - adv += "Source archives:\n\n" - elif a == "all": - adv += "Architecture independent packages:\n\n" - else: - adv += "%s architecture (%s)\n\n" % (a, - Cnf["Architectures::%s" % a]) - - for file in updated_pkgs[suite][a].keys(): - adv += " http://%s/%s%s\n" % ( - archive, updated_pkgs[suite][a][file]["poolname"], file) - adv += " Size/MD5 checksum: %8s %s\n" % ( - updated_pkgs[suite][a][file]["size"], - updated_pkgs[suite][a][file]["md5"]) - adv += "\n" + if a == "source": + adv += "Source archives:\n\n" + elif a == "all": + adv += "Architecture independent packages:\n\n" + else: + adv += "%s architecture (%s)\n\n" % (a, + Cnf["Architectures::%s" % a]) + + for file in updated_pkgs[suite][a].keys(): + adv += " http://%s/%s%s\n" % ( + archive, updated_pkgs[suite][a][file]["poolname"], file) + adv += " Size/MD5 checksum: %8s %s\n" % ( + updated_pkgs[suite][a][file]["size"], + updated_pkgs[suite][a][file]["md5"]) + adv += "\n" adv = adv.rstrip() Subst["__ADVISORY_TEXT__"] = adv - adv = utils.TemplateSubst(Subst, template) + adv = daklib.utils.TemplateSubst(Subst, template) return adv def spawn(command): if not re_taint_free.match(command): - utils.fubar("Invalid character in \"%s\"." % (command)) + daklib.utils.fubar("Invalid character in \"%s\"." % (command)) if Options["No-Action"]: print "[%s]" % (command) else: (result, output) = commands.getstatusoutput(command) if (result != 0): - utils.fubar("Invocation of '%s' failed:\n%s\n" % (command, output), result) + daklib.utils.fubar("Invocation of '%s' failed:\n%s\n" % (command, output), result) ##################### ! ! ! N O T E ! ! ! ##################### @@ -320,9 +340,9 @@ def spawn(command): def sudo(arg, fn, exit): if Options["Sudo"]: if advisory == None: - utils.fubar("Must set advisory name") - os.spawnl(os.P_WAIT, "/usr/bin/sudo","/usr/bin/sudo", "-u", "katie", "-H", - "/org/security.debian.org/katie/newamber", "-"+arg, "--", advisory) + daklib.utils.fubar("Must set advisory name") + os.spawnl(os.P_WAIT, "/usr/bin/sudo", "/usr/bin/sudo", "-u", "dak", "-H", + "/usr/local/bin/dak new-security-install", "-"+arg, "--", advisory) else: fn() if exit: @@ -336,26 +356,23 @@ def _do_Approve(): if not Options["No-Action"]: adv_file = "./advisory.%s" % (advisory) if not os.path.exists(adv_file): - adv_file = Cnf["Dir::Templates"]+"/amber.advisory" + adv_file = Cnf["Dir::Templates"]+"/security-install.advisory" adv_fd = os.open(draft, os.O_RDWR|os.O_CREAT|os.O_EXCL, 0664) os.write(adv_fd, generate_advisory(adv_file)) os.close(adv_fd) adv_fd = None - # 2. run kelly on changes + # 2. run dak process-accepted on changes print "Accepting packages..." - spawn("%s/kelly -pa %s" % (Cnf["Dir::Katie"], " ".join(changes))) - - # 3. run jenna / apt-ftparchve / ziyi / tiffani - if not Options["No-Action"]: - os.chdir(Cnf["Dir::Katie"]) + spawn("dak process-accepted -pa %s" % (" ".join(changes))) + # 3. run dak make-suite-file-list / apt-ftparchve / dak generate-releases print "Updating file lists for apt-ftparchive..." - spawn("./jenna") + spawn("dak make-suite-file-list") print "Updating Packages and Sources files..." - spawn("apt-ftparchive generate %s" % (utils.which_apt_conf_file())) + spawn("apt-ftparchive generate %s" % (daklib.utils.which_apt_conf_file())) print "Updating Release files..." - spawn("./ziyi") + spawn("dak generate-releases") print "Triggering security mirrors..." spawn("sudo -u archvsync /home/archvsync/signal_security") @@ -367,78 +384,77 @@ def _do_Approve(): def do_Disembargo(): sudo("D", _do_Disembargo, True) def _do_Disembargo(): if os.getcwd() != Cnf["Dir::Queue::Embargoed"].rstrip("/"): - utils.fubar("Can only disembargo from %s" % Cnf["Dir::Queue::Embargoed"]) + daklib.utils.fubar("Can only disembargo from %s" % Cnf["Dir::Queue::Embargoed"]) dest = Cnf["Dir::Queue::Unembargoed"] - emb_q = db_access.get_or_set_queue_id("embargoed") - une_q = db_access.get_or_set_queue_id("unembargoed") + emb_q = daklib.database.get_or_set_queue_id("embargoed") + une_q = daklib.database.get_or_set_queue_id("unembargoed") - queuefiles = [] for c in changes: print "Disembargoing %s" % (c) - Katie.init_vars() - Katie.pkg.changes_file = c - Katie.update_vars() + Upload.init_vars() + Upload.pkg.changes_file = c + Upload.update_vars() - if "source" in Katie.pkg.changes["architecture"].keys(): - print "Adding %s %s to disembargo table" % (Katie.pkg.changes["source"], Katie.pkg.changes["version"]) - Katie.projectB.query("INSERT INTO disembargo (package, version) VALUES ('%s', '%s')" % (Katie.pkg.changes["source"], Katie.pkg.changes["version"])) + if "source" in Upload.pkg.changes["architecture"].keys(): + print "Adding %s %s to disembargo table" % (Upload.pkg.changes["source"], Upload.pkg.changes["version"]) + Upload.projectB.query("INSERT INTO disembargo (package, version) VALUES ('%s', '%s')" % (Upload.pkg.changes["source"], Upload.pkg.changes["version"])) files = {} - for suite in Katie.pkg.changes["distribution"].keys(): - if suite not in Cnf.ValueList("Dinstall::QueueBuildSuites"): - continue - dest_dir = Cnf["Dir::QueueBuild"] - if Cnf.FindB("Dinstall::SecurityQueueBuild"): - dest_dir = os.path.join(dest_dir, suite) - for file in Katie.pkg.files.keys(): - files[os.path.join(dest_dir, file)] = 1 - - files = files.keys() - Katie.projectB.query("BEGIN WORK") - for f in files: - Katie.projectB.query("UPDATE queue_build SET queue = %s WHERE filename = '%s' AND queue = %s" % (une_q, f, emb_q)) - Katie.projectB.query("COMMIT WORK") - - for file in Katie.pkg.files.keys(): - utils.copy(file, os.path.join(dest, file)) - os.unlink(file) + for suite in Upload.pkg.changes["distribution"].keys(): + if suite not in Cnf.ValueList("Dinstall::QueueBuildSuites"): + continue + dest_dir = Cnf["Dir::QueueBuild"] + if Cnf.FindB("Dinstall::SecurityQueueBuild"): + dest_dir = os.path.join(dest_dir, suite) + for file in Upload.pkg.files.keys(): + files[os.path.join(dest_dir, file)] = 1 + + files = files.keys() + Upload.projectB.query("BEGIN WORK") + for f in files: + Upload.projectB.query("UPDATE queue_build SET queue = %s WHERE filename = '%s' AND queue = %s" % (une_q, f, emb_q)) + Upload.projectB.query("COMMIT WORK") + + for file in Upload.pkg.files.keys(): + daklib.utils.copy(file, os.path.join(dest, file)) + os.unlink(file) for c in changes: - utils.copy(c, os.path.join(dest, c)) - os.unlink(c) - k = c[:8] + ".katie" - utils.copy(k, os.path.join(dest, k)) - os.unlink(k) + daklib.utils.copy(c, os.path.join(dest, c)) + os.unlink(c) + k = c[:8] + ".dak" + daklib.utils.copy(k, os.path.join(dest, k)) + os.unlink(k) def do_Reject(): sudo("R", _do_Reject, True) def _do_Reject(): global changes for c in changes: print "Rejecting %s..." % (c) - Katie.init_vars() - Katie.pkg.changes_file = c - Katie.update_vars() + Upload.init_vars() + Upload.pkg.changes_file = c + Upload.update_vars() files = {} - for suite in Katie.pkg.changes["distribution"].keys(): - if suite not in Cnf.ValueList("Dinstall::QueueBuildSuites"): - continue - dest_dir = Cnf["Dir::QueueBuild"] - if Cnf.FindB("Dinstall::SecurityQueueBuild"): - dest_dir = os.path.join(dest_dir, suite) - for file in Katie.pkg.files.keys(): - files[os.path.join(dest_dir, file)] = 1 - - files = files.keys() - - aborted = Katie.do_reject() - if not aborted: - os.unlink(c[:-8]+".katie") - for f in files: - Katie.projectB.query( - "DELETE FROM queue_build WHERE filename = '%s'" % (f)) - os.unlink(f) + for suite in Upload.pkg.changes["distribution"].keys(): + if suite not in Cnf.ValueList("Dinstall::QueueBuildSuites"): + continue + dest_dir = Cnf["Dir::QueueBuild"] + if Cnf.FindB("Dinstall::SecurityQueueBuild"): + dest_dir = os.path.join(dest_dir, suite) + for file in Upload.pkg.files.keys(): + files[os.path.join(dest_dir, file)] = 1 + + files = files.keys() + + aborted = Upload.do_reject() + if not aborted: + os.unlink(c[:-8]+".katie") + for f in files: + Upload.projectB.query( + "DELETE FROM queue_build WHERE filename = '%s'" % (f)) + os.unlink(f) print "Updating buildd information..." spawn("/org/security.debian.org/katie/cron.buildd-security") @@ -449,26 +465,26 @@ def _do_Reject(): def do_DropAdvisory(): for c in changes: - Katie.init_vars() - Katie.pkg.changes_file = c - Katie.update_vars() - del Katie.pkg.changes["adv id"] - Katie.dump_vars(os.getcwd()) + Upload.init_vars() + Upload.pkg.changes_file = c + Upload.update_vars() + del Upload.pkg.changes["adv id"] + Upload.dump_vars(os.getcwd()) quit() def do_Edit(): adv_file = "./advisory.%s" % (advisory) if not os.path.exists(adv_file): - utils.copy(Cnf["Dir::Templates"]+"/amber.advisory", adv_file) - editor = os.environ.get("EDITOR","vi") + daklib.utils.copy(Cnf["Dir::Templates"]+"/security-install.advisory", adv_file) + editor = os.environ.get("EDITOR", "vi") result = os.system("%s %s" % (editor, adv_file)) if result != 0: - utils.fubar("%s invocation failed for %s." % (editor, adv_file)) + daklib.utils.fubar("%s invocation failed for %s." % (editor, adv_file)) def do_Show(): adv_file = "./advisory.%s" % (advisory) if not os.path.exists(adv_file): - adv_file = Cnf["Dir::Templates"]+"/amber.advisory" + adv_file = Cnf["Dir::Templates"]+"/security-install.advisory" print "====\n%s\n====" % (generate_advisory(adv_file)) def do_Quit(): @@ -484,66 +500,71 @@ def main(): if extras: if not advisory: changes = extras - else: + else: if srcverarches == {}: if not yes_no("Create new advisory %s?" % (advisory)): - print "Not doing anything, then" - quit() + print "Not doing anything, then" + quit() else: advisory_info() - doextras = [] + doextras = [] for c in extras: - if yes_no("Add %s to %s?" % (c, advisory)): - doextras.append(c) + if yes_no("Add %s to %s?" % (c, advisory)): + doextras.append(c) extras = doextras add_changes(extras) if not advisory: - utils.fubar("Must specify an advisory id") + daklib.utils.fubar("Must specify an advisory id") if not changes: - utils.fubar("No changes specified") + daklib.utils.fubar("No changes specified") if Options["Approve"]: - advisory_info() + advisory_info() do_Approve() elif Options["Reject"]: - advisory_info() + advisory_info() do_Reject() elif Options["Disembargo"]: - advisory_info() + advisory_info() do_Disembargo() elif Options["Drop-Advisory"]: advisory_info() - do_DropAdvisory() + do_DropAdvisory() else: while 1: default = "Q" - opts = ["Approve", "Edit advisory"] - if os.path.exists("./advisory.%s" % advisory): - default = "A" - else: - default = "E" - if os.getcwd() == Cnf["Dir::Queue::Embargoed"].rstrip("/"): - opts.append("Disembargo") - opts += ["Show advisory", "Reject", "Quit"] - - advisory_info() + opts = ["Approve", "Edit advisory"] + if os.path.exists("./advisory.%s" % advisory): + default = "A" + else: + default = "E" + if os.getcwd() == Cnf["Dir::Queue::Embargoed"].rstrip("/"): + opts.append("Disembargo") + opts += ["Show advisory", "Reject", "Quit"] + + advisory_info() what = prompt(opts, default) - if what == "Quit": - do_Quit() - elif what == "Approve": - do_Approve() - elif what == "Edit advisory": - do_Edit() - elif what == "Show advisory": - do_Show() - elif what == "Disembargo": - do_Disembargo() - elif what == "Reject": - do_Reject() - else: - utils.fubar("Impossible answer '%s', wtf?" % (what)) - -main() + if what == "Quit": + do_Quit() + elif what == "Approve": + do_Approve() + elif what == "Edit advisory": + do_Edit() + elif what == "Show advisory": + do_Show() + elif what == "Disembargo": + do_Disembargo() + elif what == "Reject": + do_Reject() + else: + daklib.utils.fubar("Impossible answer '%s', wtf?" % (what)) + +################################################################################ + +if __name__ == '__main__': + main() + +################################################################################