cnf = Config()
print "Checking reverse dependencies..."
- components = cnf.ValueList("Suite::%s::Components" % suites[0])
+ components = get_component_names()
dep_problem = 0
p2c = {}
all_broken = {}
carbon_copy = []
for copy_to in utils.split_args(Options.get("Carbon-Copy")):
if copy_to.isdigit():
- carbon_copy.append(copy_to + "@" + cnf["Dinstall::BugServer"])
+ if cnf.has_key("Dinstall::BugServer"):
+ carbon_copy.append(copy_to + "@" + cnf["Dinstall::BugServer"])
+ else:
+ utils.fubar("Asked to send mail to #%s in BTS but Dinstall::BugServer is not configured" % copy_to)
elif copy_to == 'package':
for package in arguments:
- carbon_copy.append(package + "@" + cnf["Dinstall::PackagesServer"])
+ if cnf.has_key("Dinstall::PackagesServer"):
+ carbon_copy.append(package + "@" + cnf["Dinstall::PackagesServer"])
if cnf.has_key("Dinstall::TrackingServer"):
carbon_copy.append(package + "@" + cnf["Dinstall::TrackingServer"])
elif '@' in copy_to:
print "Will also close bugs: "+Options["Done"]
if carbon_copy:
print "Will also send CCs to: " + ", ".join(carbon_copy)
+ if Options["Do-Close"]:
+ print "Will also close associated bug reports."
print
print "------------------- Reason -------------------"
print Options["Reason"]
logfile.write("Closed bugs: %s\n" % (Options["Done"]))
logfile.write("\n------------------- Reason -------------------\n%s\n" % (Options["Reason"]))
logfile.write("----------------------------------------------\n")
- logfile.write("=========================================================================\n")
- logfile.close()
# Do the same in rfc822 format
logfile822 = utils.open_file(cnf["Rm::LogFile822"], 'a')
logfile822.write("Reason: %s\n" % Options["Reason"].replace('\n', '\n '))
if Options["Done"]:
logfile822.write("Bug: %s\n" % Options["Done"])
- logfile822.write("\n")
- logfile822.close()
dsc_type_id = get_override_type('dsc', session).overridetype_id
deb_type_id = get_override_type('deb', session).overridetype_id
session.commit()
print "done."
+ # If we don't have a Bug server configured, we're done
+ if not cnf.has_key("Dinstall::BugServer"):
+ if Options["Done"] or Options["Do-Close"]:
+ print "Cannot send mail to BugServer as Dinstall::BugServer is not configured"
+
+ logfile.write("=========================================================================\n")
+ logfile.close()
+
+ logfile822.write("\n")
+ logfile822.close()
+
+ return
+
# read common subst variables for all bug closure mails
Subst_common = {}
Subst_common["__RM_ADDRESS__"] = cnf["Dinstall::MyEmailAddress"]
summarymail = "%s\n------------------- Reason -------------------\n%s\n" % (summary, Options["Reason"])
summarymail += "----------------------------------------------\n"
Subst_close_rm["__SUMMARY__"] = summarymail
+
whereami = utils.where_am_i()
- Archive = cnf.SubTree("Archive::%s" % (whereami))
- Subst_close_rm["__MASTER_ARCHIVE__"] = Archive["OriginServer"]
- Subst_close_rm["__PRIMARY_MIRROR__"] = Archive["PrimaryMirror"]
+ Archive = get_archive(whereami, session)
+ if Archive is None:
+ utils.warn("Cannot find archive %s. Setting blank values for origin" % whereami)
+ Subst_close_rm["__MASTER_ARCHIVE__"] = ""
+ Subst_close_rm["__PRIMARY_MIRROR__"] = ""
+ else:
+ Subst_close_rm["__MASTER_ARCHIVE__"] = Archive.origin_server
+ Subst_close_rm["__PRIMARY_MIRROR__"] = Archive.primary_mirror
+
for bug in utils.split_args(Options["Done"]):
Subst_close_rm["__BUG_NUMBER__"] = bug
- mail_message = utils.TemplateSubst(Subst_close_rm,cnf["Dir::Templates"]+"/rm.bug-close")
+ if Options["Do-Close"]:
+ mail_message = utils.TemplateSubst(Subst_close_rm,cnf["Dir::Templates"]+"/rm.bug-close-with-related")
+ else:
+ mail_message = utils.TemplateSubst(Subst_close_rm,cnf["Dir::Templates"]+"/rm.bug-close")
utils.send_mail(mail_message)
# close associated bug reports
- # FIXME: We should also close possible WNPP bugs for that package, but
- # currently there's no sane way to determine them
if Options["Do-Close"]:
Subst_close_other = Subst_common
bcc = []
+ wnpp = utils.parse_wnpp_bug_file()
if len(versions) == 1:
Subst_close_other["__VERSION__"] = versions[0]
else:
else:
Subst_close_other["__BCC__"] = "X-Filler: 42"
# at this point, I just assume, that the first closed bug gives
- # some usefull information on why the package got removed
+ # some useful information on why the package got removed
Subst_close_other["__BUG_NUMBER__"] = utils.split_args(Options["Done"])[0]
- if len(sources) > 1:
+ if len(sources) == 1:
+ source_pkg = source.split("_", 1)[0]
+ else:
utils.fubar("Closing bugs for multiple source pakcages is not supported. Do it yourself.")
Subst_close_other["__BUG_NUMBER_ALSO__"] = ""
- Subst_close_other["__SOURCE__"] = source.split("_", 1)[0]
- for bug in bts.get_bugs('src', source.split("_", 1)[0], 'status', 'open'):
- Subst_close_other["__BUG_NUMBER_ALSO__"] += str(bug) + "-done@" + cnf["Dinstall::BugServer"] + ","
+ Subst_close_other["__SOURCE__"] = source_pkg
+ other_bugs = bts.get_bugs('src', source_pkg, 'status', 'open')
+ if other_bugs:
+ logfile.write("Also closing bug(s):")
+ logfile822.write("Also-Bugs:")
+ for bug in other_bugs:
+ Subst_close_other["__BUG_NUMBER_ALSO__"] += str(bug) + "-done@" + cnf["Dinstall::BugServer"] + ","
+ logfile.write(" " + str(bug))
+ logfile822.write(" " + str(bug))
+ logfile.write("\n")
+ logfile822.write("\n")
+ if source_pkg in wnpp.keys():
+ logfile.write("Also closing WNPP bug(s):")
+ logfile822.write("Also-WNPP:")
+ for bug in wnpp[source_pkg]:
+ # the wnpp-rm file we parse also contains our removal
+ # bugs, filtering that out
+ if bug != Subst_close_other["__BUG_NUMBER__"]:
+ Subst_close_other["__BUG_NUMBER_ALSO__"] += str(bug) + "-done@" + cnf["Dinstall::BugServer"] + ","
+ logfile.write(" " + str(bug))
+ logfile822.write(" " + str(bug))
+ logfile.write("\n")
+ logfile822.write("\n")
+
mail_message = utils.TemplateSubst(Subst_close_other,cnf["Dir::Templates"]+"/rm.bug-close-related")
if Subst_close_other["__BUG_NUMBER_ALSO__"]:
utils.send_mail(mail_message)
+
+ logfile.write("=========================================================================\n")
+ logfile.close()
+
+ logfile822.write("\n")
+ logfile822.close()
+
#######################################################################################
if __name__ == '__main__':