# General purpose archive tool for ftpmaster
# Copyright (C) 2000, 2001 James Troup <james@nocrew.org>
-# $Id: melanie,v 1.12 2001-04-03 10:05:35 troup Exp $
+# $Id: melanie,v 1.16 2001-09-26 03:15:16 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
+ -a, --architecture=ARCH only act on this architecture
+ -b, --binary 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#
+ -m, --reason=MSG reason for removal
+ -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"""
+ sys.exit(exit_code)
+
+################################################################################
+
# "That's just fucking great! Game over, man! What the fuck are we
# going to do now?"
global Cnf, projectB;
apt_pkg.init();
-
+
Cnf = apt_pkg.newConfiguration();
apt_pkg.ReadConfigFileISC(Cnf,utils.which_conf_file());
arguments = apt_pkg.ParseCommandLine(Cnf,Arguments,sys.argv);
Options = Cnf.SubTree("Melanie::Options")
+
+ if Options["Help"]:
+ usage(0)
+
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"]:
source = re_strip_source_version.sub('', source);
if source_packages.has_key(source):
to_remove.append(i[2:]);
- #else:
- #sys.stderr.write("W: skipping '%s' as it's source ('%s') isn't one of the source packages.\n" % (filename, source));
print "done."
# If we don't have a reason; spawn an editor so the user can add one
# If -n/--no-action, drop out here
if Options["No-Action"]:
sys.exit(0);
-
+
game_over();
- whoami = string.replace(string.split(pwd.getpwuid(os.getuid())[4],',')[0], '.', '');
+ whoami = utils.whoami();
date = commands.getoutput('date -R');
# Log first; if it all falls apart I want a record that we at least tried.
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.12 $\n" + carbon_copy[:-1];
+ Subst["__CC__"] = "X-Melanie: $Revision: 1.16 $\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();