X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Foverride.py;h=2e10bca17b5c314f8ef6237b0363b2ddff09dd11;hb=d9822f04453a1b62ca0aa66e2efeea35f654778f;hp=10e91e4551592e64e4aefbbc43e5f9534671971e;hpb=7aaaad3135c9164390af5897925660842368660b;p=dak.git diff --git a/dak/override.py b/dak/override.py old mode 100755 new mode 100644 index 10e91e45..2e10bca1 --- a/dak/override.py +++ b/dak/override.py @@ -26,9 +26,10 @@ ################################################################################ import pg, sys -import apt_pkg, logging -import dak.lib.database as database -import dak.lib.utils as utils +import apt_pkg +import daklib.logging +import daklib.database +import daklib.utils ################################################################################ @@ -37,9 +38,9 @@ projectB = None ################################################################################ -# Shamelessly stolen from 'dak rm'. Should probably end up in utils.py +# Shamelessly stolen from 'dak rm'. Should probably end up in daklib.utils.py def game_over(): - answer = utils.our_raw_input("Continue (y/N)? ").lower() + answer = daklib.utils.our_raw_input("Continue (y/N)? ").lower() if answer != "y": print "Aborted." sys.exit(1) @@ -47,7 +48,7 @@ def game_over(): def usage (exit_code=0): print """Usage: dak override [OPTIONS] package [section] [priority] -Make microchanges or microqueries of the overrides +Make microchanges or microqueries of the binary overrides -h, --help show this help and exit -d, --done=BUG# send priority/section change as closure to bug# @@ -59,7 +60,7 @@ Make microchanges or microqueries of the overrides def main (): global Cnf, projectB - Cnf = utils.get_conf() + Cnf = daklib.utils.get_conf() Arguments = [('h',"help","Override::Options::Help"), ('d',"done","Override::Options::Done", "HasArg"), @@ -67,27 +68,27 @@ def main (): ('s',"suite","Override::Options::Suite", "HasArg"), ] for i in ["help", "no-action"]: - if not Cnf.has_key("Override::Options::%s" % (i)): - Cnf["Override::Options::%s" % (i)] = "" + if not Cnf.has_key("Override::Options::%s" % (i)): + Cnf["Override::Options::%s" % (i)] = "" if not Cnf.has_key("Override::Options::Suite"): - Cnf["Override::Options::Suite"] = "unstable" + Cnf["Override::Options::Suite"] = "unstable" arguments = apt_pkg.ParseCommandLine(Cnf,Arguments,sys.argv) Options = Cnf.SubTree("Override::Options") if Options["Help"]: - usage() + usage() projectB = pg.connect(Cnf["DB::Name"], Cnf["DB::Host"], int(Cnf["DB::Port"])) - database.init(Cnf, projectB) + daklib.database.init(Cnf, projectB) if not arguments: - utils.fubar("package name is a required argument.") + daklib.utils.fubar("package name is a required argument.") package = arguments.pop(0) suite = Options["Suite"] if arguments and len(arguments) > 2: - utils.fubar("Too many arguments") + daklib.utils.fubar("Too many arguments") if arguments and len(arguments) == 1: # Determine if the argument is a priority or a section... @@ -102,32 +103,54 @@ def main (): elif r[0][1] == 1: arguments = (".",arg) else: - utils.fubar("%s is not a valid section or priority" % (arg)) - + daklib.utils.fubar("%s is not a valid section or priority" % (arg)) # Retrieve current section/priority... - q = projectB.query(""" - SELECT priority.priority AS prio, section.section AS sect - FROM override, priority, section, suite + oldsection, oldsourcesection, oldpriority = None, None, None + for type in ['source', 'binary']: + eqdsc = '!=' + if type == 'source': + eqdsc = '=' + q = projectB.query(""" + SELECT priority.priority AS prio, section.section AS sect, override_type.type AS type + FROM override, priority, section, suite, override_type WHERE override.priority = priority.id + AND override.type = override_type.id + AND override_type.type %s 'dsc' AND override.section = section.id AND override.package = %s AND override.suite = suite.id AND suite.suite_name = %s - """ % (pg._quote(package,"str"), pg._quote(suite,"str"))) + """ % (eqdsc, pg._quote(package,"str"), pg._quote(suite,"str"))) - if q.ntuples() == 0: - utils.fubar("Unable to find package %s" % (package)) - if q.ntuples() > 1: - utils.fubar("%s is ambiguous. Matches %d packages" % (package,q.ntuples())) + if q.ntuples() == 0: + continue + if q.ntuples() > 1: + daklib.utils.fubar("%s is ambiguous. Matches %d packages" % (package,q.ntuples())) + + r = q.getresult() + if type == 'binary': + oldsection = r[0][1] + oldpriority = r[0][0] + else: + oldsourcesection = r[0][1] - r = q.getresult() - oldsection = r[0][1] - oldpriority = r[0][0] + if not oldpriority and not oldsourcesection: + daklib.utils.fubar("Unable to find package %s" % (package)) + if oldsection and oldsourcesection and oldsection != oldsourcesection: + # When setting overrides, both source & binary will become the same section + daklib.utils.warn("Source is in section '%s' instead of '%s'" % (oldsourcesection, oldsection)) + if not oldsection: + oldsection = oldsourcesection if not arguments: - print "%s is in section '%s' at priority '%s'" % ( - package,oldsection,oldpriority) + if oldpriority: + print "%s is in section '%s' at priority '%s'" % ( + package,oldsection,oldpriority) + elif oldsourcesection: + # no use printing this line if also binary + print "%s is in section '%s'" % ( + package,oldsourcesection) sys.exit(0) # At this point, we have a new section and priority... check they're valid... @@ -142,20 +165,23 @@ def main (): pg._quote(newsection,"str"))) if q.ntuples() == 0: - utils.fubar("Supplied section %s is invalid" % (newsection)) + daklib.utils.fubar("Supplied section %s is invalid" % (newsection)) newsecid = q.getresult()[0][0] q = projectB.query("SELECT id FROM priority WHERE priority=%s" % ( pg._quote(newpriority,"str"))) if q.ntuples() == 0: - utils.fubar("Supplied priority %s is invalid" % (newpriority)) + daklib.utils.fubar("Supplied priority %s is invalid" % (newpriority)) newprioid = q.getresult()[0][0] if newpriority == oldpriority and newsection == oldsection: print "I: Doing nothing" sys.exit(0) + if newpriority and not oldpriority: + daklib.utils.fubar("Trying to set priority of a source-only package") + # If we're in no-action mode if Options["No-Action"]: if newpriority != oldpriority: @@ -174,13 +200,13 @@ def main (): if not Options.has_key("Done"): pass - #utils.warn("No bugs to close have been specified. Noone will know you have done this.") + #daklib.utils.warn("No bugs to close have been specified. Noone will know you have done this.") else: print "I: Will close bug(s): %s" % (Options["Done"]) game_over() - Logger = logging.Logger(Cnf, "override") + Logger = daklib.logging.Logger(Cnf, "override") projectB.query("BEGIN WORK") # We're in "do it" mode, we have something to do... do it @@ -189,9 +215,10 @@ def main (): UPDATE override SET priority=%d WHERE package=%s + AND override.type != %d AND suite = (SELECT id FROM suite WHERE suite_name=%s)""" % ( newprioid, - pg._quote(package,"str"), + pg._quote(package,"str"), daklib.database.get_override_type_id("dsc"), pg._quote(suite,"str") )) Logger.log(["changed priority",package,oldpriority,newpriority]) @@ -204,7 +231,7 @@ def main (): newsecid, pg._quote(package,"str"), pg._quote(suite,"str") )) - Logger.log(["changed priority",package,oldsection,newsection]) + Logger.log(["changed section",package,oldsection,newsection]) projectB.query("COMMIT WORK") if Options.has_key("Done"): @@ -220,10 +247,10 @@ def main (): Subst["__BCC__"] = "Bcc: " + ", ".join(bcc) else: Subst["__BCC__"] = "X-Filler: 42" - Subst["__CC__"] = "X-DAK: dak override" + Subst["__CC__"] = "X-DAK: dak override\nX-Katie: alicia $Revision: 1.6$" Subst["__ADMIN_ADDRESS__"] = Cnf["Dinstall::MyAdminAddress"] Subst["__DISTRO__"] = Cnf["Dinstall::MyDistribution"] - Subst["__WHOAMI__"] = utils.whoami() + Subst["__WHOAMI__"] = daklib.utils.whoami() summary = "Concerning package %s...\n" % (package) summary += "Operating on the %s suite\n" % (suite) @@ -233,11 +260,11 @@ def main (): summary += "Changed section from %s to %s\n" % (oldsection,newsection) Subst["__SUMMARY__"] = summary - for bug in utils.split_args(Options["Done"]): + for bug in daklib.utils.split_args(Options["Done"]): Subst["__BUG_NUMBER__"] = bug - mail_message = utils.TemplateSubst( + mail_message = daklib.utils.TemplateSubst( Subst,Cnf["Dir::Templates"]+"/override.bug-close") - utils.send_mail(mail_message) + daklib.utils.send_mail(mail_message) Logger.log(["closed bug",bug]) Logger.close()