X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Frm.py;h=2f9091ee178bcaed966029958890abf713cf1f2f;hb=d7b3341ac987031468fd7ba8020620d2fecaccd1;hp=d1fa3d9f02a0f90f269b273af48ac002e804c848;hpb=73695ee3c0c0d6b7b72341f62535af0d65bfbe31;p=dak.git diff --git a/dak/rm.py b/dak/rm.py index d1fa3d9f..2f9091ee 100755 --- a/dak/rm.py +++ b/dak/rm.py @@ -65,7 +65,8 @@ def usage (exit_code=0): Remove PACKAGE(s) from suite(s). -a, --architecture=ARCH only act on this architecture - -b, --binary remove binaries only + -b, --binary PACKAGE are binary packages to remove + -B, --binary-only remove binaries only -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# @@ -117,7 +118,8 @@ def main (): Arguments = [('h',"help","Rm::Options::Help"), ('a',"architecture","Rm::Options::Architecture", "HasArg"), - ('b',"binary", "Rm::Options::Binary-Only"), + ('b',"binary", "Rm::Options::Binary"), + ('B',"binary-only", "Rm::Options::Binary-Only"), ('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 @@ -130,7 +132,7 @@ def main (): ('S',"source-only", "Rm::Options::Source-Only"), ] - for i in [ "architecture", "binary-only", "carbon-copy", "component", + for i in [ "architecture", "binary", "binary-only", "carbon-copy", "component", "done", "help", "no-action", "partial", "rdep-check", "reason", "source-only", "Do-Close" ]: if not cnf.has_key("Rm::Options::%s" % (i)): @@ -151,8 +153,10 @@ def main (): utils.fubar("need at least one package name as an argument.") if Options["Architecture"] and Options["Source-Only"]: utils.fubar("can't use -a/--architecture and -S/--source-only options simultaneously.") - if Options["Binary-Only"] and Options["Source-Only"]: - utils.fubar("can't use -b/--binary-only and -S/--source-only options simultaneously.") + if ((Options["Binary"] and Options["Source-Only"]) + or (Options["Binary"] and Options["Binary-Only"]) + or (Options["Binary-Only"] and Options["Source-Only"])): + utils.fubar("Only one of -b/--binary, -B/--binary-only and -S/--source-only can be used.") if Options.has_key("Carbon-Copy") and not Options.has_key("Done"): utils.fubar("can't use -C/--carbon-copy without also using -d/--done option.") if Options["Architecture"] and not Options["Partial"]: @@ -160,9 +164,8 @@ def main (): Options["Partial"] = "true" if Options["Do-Close"] and not Options["Done"]: utils.fubar("No.") - if Options["Do-Close"] and Options["Binary-Only"]: - utils.fubar("No.") - if Options["Do-Close"] and Options["Source-Only"]: + if (Options["Do-Close"] + and (Options["Binary"] or Options["Binary-Only"] or Options["Source-Only"])): utils.fubar("No.") if Options["Do-Close"] and Options["Suite"] != 'unstable': utils.fubar("No.") @@ -199,7 +202,7 @@ def main (): else: utils.fubar("Invalid -C/--carbon-copy argument '%s'; not a bug number, 'package' or email address." % (copy_to)) - if Options["Binary-Only"]: + if Options["Binary"]: field = "b.package" else: field = "s.source" @@ -241,27 +244,24 @@ def main (): if Options["Rdep-Check"] and len(suites) > 1: utils.fubar("Reverse dependency check on multiple suites is not implemented.") - print "Working...", - sys.stdout.flush() to_remove = [] maintainers = {} - # We have 3 modes of package selection: binary-only, source-only - # and source+binary. The first two are trivial and obvious; the - # latter is a nasty mess, but very nice from a UI perspective so - # we try to support it. + # We have 3 modes of package selection: binary, source-only, binary-only + # and source+binary. # XXX: TODO: This all needs converting to use placeholders or the object # API. It's an SQL injection dream at the moment - if Options["Binary-Only"]: - # Binary-only + if Options["Binary"]: + # Removal by binary package name q = session.execute("SELECT b.package, b.version, a.arch_string, b.id, b.maintainer FROM binaries b, bin_associations ba, architecture a, suite su, files f, files_archive_map af, component c WHERE ba.bin = b.id AND ba.suite = su.id AND b.architecture = a.id AND b.file = f.id AND af.file_id = f.id AND af.archive_id = su.archive_id AND af.component_id = c.id %s %s %s %s" % (con_packages, con_suites, con_components, con_architectures)) to_remove.extend(q) else: # Source-only - q = session.execute("SELECT s.source, s.version, 'source', s.id, s.maintainer FROM source s, src_associations sa, suite su, archive, files f, files_archive_map af, component c WHERE sa.source = s.id AND sa.suite = su.id AND archive.id = su.archive_id AND s.file = f.id AND af.file_id = f.id AND af.archive_id = su.archive_id AND af.component_id = c.id %s %s %s" % (con_packages, con_suites, con_components)) - to_remove.extend(q) + if not Options["Binary-Only"]: + q = session.execute("SELECT s.source, s.version, 'source', s.id, s.maintainer FROM source s, src_associations sa, suite su, archive, files f, files_archive_map af, component c WHERE sa.source = s.id AND sa.suite = su.id AND archive.id = su.archive_id AND s.file = f.id AND af.file_id = f.id AND af.archive_id = su.archive_id AND af.component_id = c.id %s %s %s" % (con_packages, con_suites, con_components)) + to_remove.extend(q) if not Options["Source-Only"]: # Source + Binary q = session.execute(""" @@ -277,7 +277,6 @@ def main (): JOIN src_associations sa ON s.id = sa.source AND sa.suite = su.id WHERE TRUE %s %s %s %s""" % (con_packages, con_suites, con_components, con_architectures)) to_remove.extend(q) - print "done." if not to_remove: print "Nothing to do."