X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Frm.py;h=536e6ddac96e94bf059270b1671c12ba2562f0ba;hb=651efe1dd248dac0facf7c9e517efcd419cc0483;hp=69b35971db1c0d223d5b560c1e82e9c9804355de;hpb=42ca3d8171b5e775d7424e1a3d037db935ee387a;p=dak.git diff --git a/dak/rm.py b/dak/rm.py index 69b35971..536e6dda 100755 --- a/dak/rm.py +++ b/dak/rm.py @@ -44,6 +44,7 @@ import os import sys import apt_pkg import apt_inst +from re import sub from daklib.config import Config from daklib.dbconn import * @@ -66,6 +67,7 @@ Remove PACKAGE(s) from suite(s). -c, --component=COMPONENT act on this component -C, --carbon-copy=EMAIL send a CC of removal message to EMAIL -d, --done=BUG# send removal message as closure to bug# + -D, --do-close also close all bugs associated to that package -h, --help show this help and exit -m, --reason=MSG reason for removal -n, --no-action don't do anything @@ -75,7 +77,7 @@ Remove PACKAGE(s) from suite(s). -S, --source-only remove source only ARCH, BUG#, COMPONENT and SUITE can be comma (or space) separated lists, e.g. - --architecture=m68k,i386""" + --architecture=amd64,i386""" sys.exit(exit_code) @@ -118,6 +120,12 @@ def reverse_depends_check(removals, suites, arches=None): (result, output) = commands.getstatusoutput("gunzip -c %s > %s" % (filename, temp_filename)) if (result != 0): utils.fubar("Gunzip invocation failed!\n%s\n" % (output), result) + # Also check for udebs + filename = "%s/dists/%s/%s/debian-installer/binary-%s/Packages.gz" % (cnf["Dir::Root"], suites[0], component, architecture) + if os.path.exists(filename): + (result, output) = commands.getstatusoutput("gunzip -c %s >> %s" % (filename, temp_filename)) + if (result != 0): + utils.fubar("Gunzip invocation failed!\n%s\n" % (output), result) packages = utils.open_file(temp_filename) Packages = apt_pkg.ParseTagFile(packages) while Packages.Step(): @@ -262,6 +270,7 @@ def main (): ('c',"component", "Rm::Options::Component", "HasArg"), ('C',"carbon-copy", "Rm::Options::Carbon-Copy", "HasArg"), # Bugs to Cc ('d',"done","Rm::Options::Done", "HasArg"), # Bugs fixed + ('D',"do-close","Rm::Options::Do-Close"), ('R',"rdep-check", "Rm::Options::Rdep-Check"), ('m',"reason", "Rm::Options::Reason", "HasArg"), # Hysterical raisins; -m is old-dinstall option for rejection reason ('n',"no-action","Rm::Options::No-Action"), @@ -298,6 +307,12 @@ def main (): if Options["Architecture"] and not Options["Partial"]: utils.warn("-a/--architecture implies -p/--partial.") Options["Partial"] = "true" + if Options["Do-Close"] and Options["Binary-Only"]: + utils.fubar("No.") + if Options["Do-Close"] and Options["Source-Only"]: + utils.fubar("No.") + if Options["Do-Close"] and Options["Suite"] != 'unstable': + utils.fubar("No.") # Force the admin to tell someone if we're not doing a 'dak # cruft-report' inspired removal (or closing a bug, which counts @@ -399,7 +414,7 @@ def main (): for i in source_packages.keys(): filename = "/".join(source_packages[i]) try: - dsc = utils.parse_changes(filename) + dsc = utils.parse_changes(filename, dsc_file=1) except CantOpenError: utils.warn("couldn't open '%s'." % (filename)) continue @@ -505,6 +520,37 @@ def main (): logfile.write("----------------------------------------------\n") logfile.flush() + # Do the same in rfc822 format + logfile822 = utils.open_file(cnf["Rm::LogFile822"], 'a') + logfile822.write("Date: %s\n" % date) + logfile822.write("Ftpmaster: %s\n" % whoami) + logfile822.write("Suite: %s\n" % suites_list) + sources = [] + binaries = [] + for package in summary.split("\n"): + for row in package.split("\n"): + element = row.split("|") + if len(element) == 3: + if element[2].find("source") > 0: + sources.append("%s_%s" % tuple(elem.strip(" ") for elem in element[:2])) + element[2] = sub("source\s?,?", "", element[2]).strip(" ") + if element[2]: + binaries.append("%s_%s [%s]" % tuple(elem.strip(" ") for elem in element)) + if sources: + logfile822.write("Sources:\n") + for source in sources: + logfile822.write(" %s\n" % source) + if binaries: + logfile822.write("Binaries:\n") + for binary in binaries: + logfile822.write(" %s\n" % binary) + logfile822.write("Reason: %s\n" % Options["Reason"].replace('\n', '\n ')) + if Options["Done"]: + logfile822.write("Bug: %s\n" % Options["Done"]) + logfile822.write("\n") + logfile822.flush() + logfile822.close() + dsc_type_id = get_override_type('dsc', session).overridetype_id deb_type_id = get_override_type('deb', session).overridetype_id