#!/usr/bin/env python
-# General purpose archive tool for ftpmaster
+# General purpose package removal tool for ftpmaster
# Copyright (C) 2000, 2001 James Troup <james@nocrew.org>
-# $Id: melanie,v 1.15 2001-08-11 22:04:27 rmurray Exp $
+# $Id: melanie,v 1.17 2001-09-27 01:23:41 troup 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
################################################################################
-def usage (exit_code):
- print """Usage: melanie [OPTIONS] package[...]
- -D, --debug=VALUE turn on debugging
- -h, --help show this help and exit
+def usage (exit_code=0):
+ print """Usage: melanie [OPTIONS] PACKAGE[...]
+Remove PACKAGE(s) from suite(s).
+
-a, --architecture=ARCH only act on this architecture
-b, --binary remove binaries only
-c, --component=COMPONENT act on this component
-n, --no-action don't do anything
-p, --partial don't affect override files
-s, --suite=SUITE act on this suite
- -S, --source-only remove source only"""
+ -S, --source-only remove source only
+ -h, --help show this help and exit
+
+ARCH, BUG#, COMPONENT and SUITE can be space seperated lists, e.g.
+ --architecture=\"m68k i386\""""
+
sys.exit(exit_code)
################################################################################
global Cnf, projectB;
apt_pkg.init();
-
+
Cnf = apt_pkg.newConfiguration();
apt_pkg.ReadConfigFileISC(Cnf,utils.which_conf_file());
- Arguments = [('D',"debug","Melanie::Options::Debug", "IntVal"),
- ('h',"help","Melanie::Options::Help"),
- ('V',"version","Melanie::Options::Version"),
+ Arguments = [('h',"help","Melanie::Options::Help"),
('a',"architecture","Melanie::Options::Architecture", "HasArg"),
('b',"binary", "Melanie::Options::Binary-Only"),
('c',"component", "Melanie::Options::Component", "HasArg"),
('S',"source-only", "Melanie::Options::Source-Only"),
];
+ for i in ["help", "architecture", "binary", "component", "carbon-copy", "done", "reason", "no-action", "partial", "source-only" ]:
+ Cnf["Melanie::Options::%s" % (i)] = "";
+ Cnf["Melanie::Options::Suite"] = "unstable";
+
arguments = apt_pkg.ParseCommandLine(Cnf,Arguments,sys.argv);
Options = Cnf.SubTree("Melanie::Options")
if Options["Help"]:
- usage(0)
+ usage();
projectB = pg.connect(Cnf["DB::Name"], Cnf["DB::Host"], int(Cnf["DB::Port"]));
db_access.init(Cnf, projectB);
suite_ids_list = [];
con_suites = "AND (";
for suite in string.split(Options["Suite"]):
-
+
if not Options["No-Action"] and suite == "stable":
print "**WARNING** About to remove from the stable suite!"
print "This should only be done just prior to a (point) release and not at"
print "There's no need to do this normally as removals from unstable will"
print "propogate to testing automagically."
game_over();
-
+
suite_id = db_access.get_suite_id(suite);
if suite_id == -1:
utils.warn("suite '%s' not recognised." % (suite));
con_components = con_components[:-3] + ")"
over_con_components = over_con_components[:-3] + ")";
else:
- con_components = "";
+ con_components = "";
over_con_components = "";
if Options["Architecture"]:
# If -n/--no-action, drop out here
if Options["No-Action"]:
sys.exit(0);
-
+
game_over();
whoami = utils.whoami();
logfile.write("\n------------------- Reason -------------------\n%s\n" % (Options["Reason"]));
logfile.write("----------------------------------------------\n");
logfile.flush();
-
+
dsc_type_id = db_access.get_override_type_id('dsc');
deb_type_id = db_access.get_override_type_id('deb');
-
+
# Do the actual deletion
print "Deleting...",
sys.stdout.flush();
else:
bcc = "Bcc: " + bcc;
Subst["__BCC__"] = bcc[:-2];
- Subst["__CC__"] = "X-Melanie: $Revision: 1.15 $\n" + carbon_copy[:-1];
+ Subst["__CC__"] = "X-Melanie: $Revision: 1.17 $\n" + carbon_copy[:-1];
Subst["__SUITE_LIST__"] = suites_list;
Subst["__SUMMARY__"] = summary;
Subst["__ADMIN_ADDRESS__"] = Cnf["Dinstall::MyAdminAddress"];
Subst["__BUG_NUMBER__"] = bug;
mail_message = utils.TemplateSubst(Subst,open(Cnf["Dir::TemplatesDir"]+"/melanie.bug-close","r").read());
utils.send_mail (mail_message, "")
-
+
logfile.write("=========================================================================\n");
logfile.close();