X-Git-Url: https://git.decadent.org.uk/gitweb/?a=blobdiff_plain;f=dak%2Ftransitions.py;h=b69c57327f69769467b0819ad51145c535e1b21d;hb=7e2d97048a4f48fb84843803dda8fdd710edda08;hp=b7020b15273a2e4d4c82d3e065550030738639ba;hpb=4ec6038d05876c3ac90fcf515ca30102a93b7070;p=dak.git diff --git a/dak/transitions.py b/dak/transitions.py index b7020b15..b69c5732 100755 --- a/dak/transitions.py +++ b/dak/transitions.py @@ -25,8 +25,9 @@ import os, pg, sys, time, errno, fcntl, tempfile, pwd, re import apt_pkg -import daklib.database -import daklib.utils +import daklib.database as database +import daklib.utils as utils +from daklib.dak_extensions import TransitionsError import syck # Globals @@ -46,7 +47,7 @@ def init(): apt_pkg.init() - Cnf = daklib.utils.get_conf() + Cnf = utils.get_conf() Arguments = [('h',"help","Edit-Transitions::Options::Help"), ('e',"edit","Edit-Transitions::Options::Edit"), @@ -74,8 +75,8 @@ def init(): Options["sudo"] = "y" projectB = pg.connect(Cnf["DB::Name"], Cnf["DB::Host"], int(Cnf["DB::Port"])) - daklib.database.init(Cnf, projectB) - + database.init(Cnf, projectB) + ################################################################################ def usage (exit_code=0): @@ -125,7 +126,7 @@ def load_transitions(trans_file): try: for test in trans: t = trans[test] - + # First check if we know all the keys for the transition and if they have # the right type (and for the packages also if the list has the right types # included, ie. not a list in list, but only str in the list) @@ -133,7 +134,7 @@ def load_transitions(trans_file): if key not in checkkeys: print "ERROR: Unknown key %s in transition %s" % (key, test) failure = True - + if key == "packages": if type(t[key]) != list: print "ERROR: Unknown type %s for packages in transition %s." % (type(t[key]), test) @@ -153,15 +154,15 @@ def load_transitions(trans_file): print "ERROR: No packages defined in transition %s" % (test) failure = True continue - + elif type(t[key]) != str: - if t[key] == "new" and type(t[key]) == int: + if key == "new" and type(t[key]) == int: # Ok, debian native version continue else: print "ERROR: Unknown type %s for key %s in transition %s" % (type(t[key]), key, test) failure = True - + # And now the other way round - are all our keys defined? for key in checkkeys: if key not in t: @@ -183,9 +184,9 @@ def load_transitions(trans_file): ##################################### #### This may run within sudo !! #### ##################################### -def lock_file(file): +def lock_file(f): for retry in range(10): - lock_fd = os.open(file, os.O_RDWR | os.O_CREAT) + lock_fd = os.open(f, os.O_RDWR | os.O_CREAT) try: fcntl.lockf(lock_fd, fcntl.LOCK_EX | fcntl.LOCK_NB) return lock_fd @@ -197,7 +198,7 @@ def lock_file(file): else: raise - daklib.utils.fubar("Couldn't obtain lock for %s." % (lockfile)) + utils.fubar("Couldn't obtain lock for %s." % (f)) ################################################################################ @@ -213,7 +214,7 @@ def write_transitions(from_trans): trans_file = Cnf["Dinstall::Reject::ReleaseTransitions"] trans_temp = trans_file + ".tmp" - + trans_lock = lock_file(trans_file) temp_lock = lock_file(trans_temp) @@ -227,9 +228,6 @@ def write_transitions(from_trans): ################################################################################ -class ParseException(Exception): - pass - ########################################## #### This usually runs within sudo !! #### ########################################## @@ -243,12 +241,12 @@ def write_transitions_from_file(from_file): sys.exit(3) if Options["sudo"]: - os.spawnl(os.P_WAIT, "/usr/bin/sudo", "/usr/bin/sudo", "-u", "dak", "-H", + os.spawnl(os.P_WAIT, "/usr/bin/sudo", "/usr/bin/sudo", "-u", "dak", "-H", "/usr/local/bin/dak", "transitions", "--import", from_file) else: trans = load_transitions(from_file) if trans is None: - raise ParseException, "Unparsable transitions file %s" % (file) + raise TransitionsError, "Unparsable transitions file %s" % (file) write_transitions(trans) ################################################################################ @@ -257,7 +255,7 @@ def temp_transitions_file(transitions): # NB: file is unlinked by caller, but fd is never actually closed. # We need the chmod, as the file is (most possibly) copied from a # sudo-ed script and would be unreadable if it has default mkstemp mode - + (fd, path) = tempfile.mkstemp("", "transitions", Cnf["Transitions::TempPath"]) os.chmod(path, 0644) f = open(path, "w") @@ -276,8 +274,8 @@ def edit_transitions(): result = os.system("%s %s" % (editor, edit_file)) if result != 0: os.unlink(edit_file) - daklib.utils.fubar("%s invocation failed for %s, not removing tempfile." % (editor, edit_file)) - + utils.fubar("%s invocation failed for %s, not removing tempfile." % (editor, edit_file)) + # Now try to load the new file test = load_transitions(edit_file) @@ -292,12 +290,12 @@ def edit_transitions(): print "------------------------------------------------------------------------" transition_info(test) - prompt = "[S]ave, Edit again, Drop changes?" - default = "S" + prompt = "[S]ave, Edit again, Drop changes?" + default = "S" answer = "XXX" while prompt.find(answer) == -1: - answer = daklib.utils.our_raw_input(prompt) + answer = utils.our_raw_input(prompt) if answer == "": answer = default answer = answer[:1].upper() @@ -333,7 +331,7 @@ def check_transitions(transitions): expected = t["new"] # Will be None if nothing is in testing. - current = daklib.database.get_suite_version(source, "testing") + current = database.get_suite_version(source, "testing") print_info(trans, source, expected, t["rm"], t["reason"], t["packages"]) @@ -365,7 +363,7 @@ def check_transitions(transitions): if Options["no-action"]: answer="n" else: - answer = daklib.utils.our_raw_input(prompt).lower() + answer = utils.our_raw_input(prompt).lower() if answer == "": answer = "n" @@ -377,7 +375,7 @@ def check_transitions(transitions): print "Committing" for remove in to_remove: del transitions[remove] - + edit_file = temp_transitions_file(transitions) write_transitions_from_file(edit_file) @@ -389,14 +387,14 @@ def check_transitions(transitions): ################################################################################ def print_info(trans, source, expected, rm, reason, packages): - print """Looking at transition: %s - Source: %s - New Version: %s - Responsible: %s - Description: %s - Blocked Packages (total: %d): %s + print """Looking at transition: %s +Source: %s +New Version: %s +Responsible: %s +Description: %s +Blocked Packages (total: %d): %s """ % (trans, source, expected, rm, reason, len(packages), ", ".join(packages)) - return + return ################################################################################ @@ -407,7 +405,7 @@ def transition_info(transitions): expected = t["new"] # Will be None if nothing is in testing. - current = daklib.database.get_suite_version(source, "testing") + current = database.get_suite_version(source, "testing") print_info(trans, source, expected, t["rm"], t["reason"], t["packages"]) @@ -435,30 +433,30 @@ def main(): #### This can run within sudo !! #### ##################################### init() - + # Check if there is a file defined (and existant) transpath = Cnf.get("Dinstall::Reject::ReleaseTransitions", "") if transpath == "": - daklib.utils.warn("Dinstall::Reject::ReleaseTransitions not defined") + utils.warn("Dinstall::Reject::ReleaseTransitions not defined") sys.exit(1) if not os.path.exists(transpath): - daklib.utils.warn("ReleaseTransitions file, %s, not found." % + utils.warn("ReleaseTransitions file, %s, not found." % (Cnf["Dinstall::Reject::ReleaseTransitions"])) sys.exit(1) # Also check if our temp directory is defined and existant temppath = Cnf.get("Transitions::TempPath", "") if temppath == "": - daklib.utils.warn("Transitions::TempPath not defined") + utils.warn("Transitions::TempPath not defined") sys.exit(1) if not os.path.exists(temppath): - daklib.utils.warn("Temporary path %s not found." % + utils.warn("Temporary path %s not found." % (Cnf["Transitions::TempPath"])) sys.exit(1) - + if Options["import"]: try: write_transitions_from_file(Options["import"]) - except ParseException, m: + except TransitionsError, m: print m sys.exit(2) sys.exit(0) @@ -470,7 +468,7 @@ def main(): transitions = load_transitions(transpath) if transitions == None: # Something very broken with the transitions, exit - daklib.utils.warn("Could not parse existing transitions file. Aborting.") + utils.warn("Could not parse existing transitions file. Aborting.") sys.exit(2) if Options["edit"]: @@ -485,7 +483,7 @@ def main(): transition_info(transitions) sys.exit(0) - + ################################################################################ if __name__ == '__main__':