From d8206557d80e455be5efdbeed2e084eeec4ace37 Mon Sep 17 00:00:00 2001 From: Joerg Jaspert Date: Wed, 12 Mar 2008 23:27:00 +0100 Subject: [PATCH] * dak/edit_transitions.py: Done a number of cleanups to make code working. Also changed the way prompting/answering goes, to not have to import daklib/queue. (edit_transitions): When done with a successful edit - also print a final overview about defined transitions --- ChangeLog | 8 +++++++ dak/edit_transitions.py | 45 ++++++++++++++++++++++++---------------- dak/process_unchecked.py | 2 +- 3 files changed, 36 insertions(+), 19 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2ce29782..782766b6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2008-03-12 Joerg Jaspert + + * dak/edit_transitions.py: Done a number of cleanups to make code + working. Also changed the way prompting/answering goes, to not + have to import daklib/queue. + (edit_transitions): When done with a successful edit - also print + a final overview about defined transitions + 2008-03-11 Joerg Jaspert * dak/process_unchecked.py: Import syck module directly, not "from diff --git a/dak/edit_transitions.py b/dak/edit_transitions.py index 0a9dae28..0d75652b 100755 --- a/dak/edit_transitions.py +++ b/dak/edit_transitions.py @@ -45,8 +45,8 @@ def init(): Cnf = daklib.utils.get_conf() Arguments = [('h',"help","Edit-Transitions::Options::Help"), - ('e',"edit","Edit-Transitions::Option::Edit"), - ('c',"check","Edit-Transitions::Option::check"), + ('e',"edit","Edit-Transitions::Options::Edit"), + ('c',"check","Edit-Transitions::Options::check"), ('n',"no-action","Edit-Transitions::Options::No-Action")] for i in ["help", "no-action", "edit", "check"]: @@ -80,11 +80,12 @@ def usage (exit_code=0): ################################################################################ def lock_file(lockfile): + retry = 0 while retry < 10: try: lock_fd = os.open(lockfile, os.O_RDONLY | os.O_CREAT | os.O_EXCL) retry = 10 - except OSError, e: + except OSError, e: if errno.errorcode[e.errno] == 'EACCES' or errno.errorcode[e.errno] == 'EEXIST': retry += 1 if (retry >= 10): @@ -106,28 +107,29 @@ def edit_transitions(): lockfile="%s.lock" % (tempfile) lock_file(lockfile) - daklib.utils.copy(trans_file, tempfile ) + daklib.utils.copy(trans_file, tempfile) editor = os.environ.get("EDITOR", "vi") while True: - result = os.system("%s %s" % (editor, temp_file)) + result = os.system("%s %s" % (editor, tempfile)) if result != 0: os.unlink(tempfile) os.unlink(lockfile) - daklib.utils.fubar("%s invocation failed for %s, not removing tempfile." % (editor, temp_file)) + daklib.utils.fubar("%s invocation failed for %s, not removing tempfile." % (editor, tempfile)) # Now try to load the new file test = load_transitions(tempfile) - if test = None: + if test == None: # Edit is broken + answer = "XXX" prompt = "Broken edit: [E]dit again, Drop changes?" + while prompt.find(answer) == -1: answer = daklib.utils.our_raw_input(prompt) - m = daklib.queue.re_default_answer.match(prompt) if answer == "": - answer = m.group(1) + answer = "E" answer = answer[:1].upper() if answer == 'E': @@ -135,16 +137,23 @@ def edit_transitions(): elif answer == 'D': os.unlink(tempfile) os.unlink(lockfile) + print "OK, discarding changes" sys.exit(0) else: # No problems in loading the new file, jump out of the while loop break # We seem to be done and also have a working file. Copy over. - daklib.utils.copy(tempfile, trans_file) + daklib.utils.copy(tempfile, trans_file, True) os.unlink(tempfile) os.unlink(lockfile) + # Before we finish print out transition info again + print "\n\n------------------------------------------------------------------------" + print "Edit done, file saved, currently defined transitions:\n" + transitions = load_transitions(Cnf["Dinstall::Reject::ReleaseTransitions"]) + transition_info(transitions) + ################################################################################ def load_transitions(trans_file): @@ -153,7 +162,7 @@ def load_transitions(trans_file): sourcecontent = sourcefile.read() try: trans = syck.load(sourcecontent) - except error, msg: + except syck.error, msg: # Someone fucked it up print "ERROR: %s" % (msg) return None @@ -175,14 +184,13 @@ Looking at transition: %s ################################################################################ def transition_info(transitions): - print "Currently defined transitions:" for trans in transitions: t = transitions[trans] source = t["source"] expected = t["new"] # Will be None if nothing is in testing. - current = daklib.database.get_testing_version(source) + current = daklib.database.get_suite_version(source, "testing") print_info(trans, source, expected, t["rm"], t["reason"], t["packages"]) @@ -213,7 +221,7 @@ def check_transitions(transitions): expected = t["new"] # Will be None if nothing is in testing. - current = daklib.database.get_testing_version(source) + current = daklib.database.get_suite_version(source, "testing") print_info(trans, source, expected, t["rm"], t["reason"], t["packages"]) @@ -241,6 +249,7 @@ def check_transitions(transitions): prompt += "," prompt += " Commit Changes? (y/N)" + answer = "" if Options["no-action"]: answer="n" @@ -281,25 +290,25 @@ def main(): # Parse the yaml file transitions = load_transitions(Cnf["Dinstall::Reject::ReleaseTransitions"]) - if transitions = None: + if transitions == None: # Something very broken with the transitions, exit daklib.utils.warn("Not doing any work, someone fucked up the transitions file outside our control") sys.exit(2) if Options["edit"]: # Output information about the currently defined transitions. + print "Currently defined transitions:" transition_info(transitions) - daklib.utils.our_raw_input("Press a key to continue...") + daklib.utils.our_raw_input("Press enter to continue...") # Lets edit the transitions file - edit_transitions(Cnf["Dinstall::Reject::ReleaseTransitions"]) + edit_transitions() elif Options["check"]: # Check and remove outdated transitions check_transitions(transitions, Cnf["Dinstall::Reject::ReleaseTransitions"]) else: # Output information about the currently defined transitions. transition_info(transitions) - daklib.utils.our_raw_input("Press a key to continue...") # Nothing requested, doing nothing besides the above display of the transitions sys.exit(0) diff --git a/dak/process_unchecked.py b/dak/process_unchecked.py index 1e71ae00..7ad64145 100755 --- a/dak/process_unchecked.py +++ b/dak/process_unchecked.py @@ -1019,7 +1019,7 @@ def check_transition(sourcepkg): sourcecontent = sourcefile.read() try: transitions = syck.load(sourcecontent) - except error, msg: + except syck.error, msg: # This shouldn't happen, there is a wrapper to edit the file which checks it, but we prefer # to be safe than ending up rejecting everything. daklib.utils.warn("Not checking transitions, the transitions file is broken: %s." % (msg)) -- 2.39.5