diff options
author | Matt Wilson <msw@redhat.com> | 2000-07-12 20:05:46 +0000 |
---|---|---|
committer | Matt Wilson <msw@redhat.com> | 2000-07-12 20:05:46 +0000 |
commit | f9b0aace80f9b2068e7f7882c3071c5069ae2b53 (patch) | |
tree | 81c96f35a6897e784dd04fdfc641120144ba7c08 /exception.py | |
parent | 4c8bdafebc9299559041cec222f33512dfb3577e (diff) | |
download | anaconda-f9b0aace80f9b2068e7f7882c3071c5069ae2b53.tar.gz anaconda-f9b0aace80f9b2068e7f7882c3071c5069ae2b53.tar.xz anaconda-f9b0aace80f9b2068e7f7882c3071c5069ae2b53.zip |
rework exception handling in GUI so we can catch during the todo.doinstall, use pc104 as default kbd
Diffstat (limited to 'exception.py')
-rw-r--r-- | exception.py | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/exception.py b/exception.py new file mode 100644 index 000000000..c15edd4ed --- /dev/null +++ b/exception.py @@ -0,0 +1,82 @@ +import isys +import os +import signal +from string import joinfields +import traceback +from cPickle import Pickler +from translate import _ +import iutil + +def handleException(todo, (type, value, tb)): + list = traceback.format_exception (type, value, tb) + text = joinfields (list, "") + rc = todo.intf.exceptionWindow (_("Exception Occurred"), text) + if rc == 1: + todo.intf.__del__ () + print text + import pdb + pdb.post_mortem (tb) + os.kill(os.getpid(), signal.SIGKILL) + elif not rc: + todo.intf.__del__ () + os.kill(os.getpid(), signal.SIGKILL) + + while 1: + rc = todo.intf.dumpWindow() + if rc: + todo.intf.__del__ () + os.kill(os.getpid(), signal.SIGKILL) + + device = todo.fdDevice + file = "/tmp/floppy" + try: + isys.makeDevInode(device, file) + except SystemError: + pass + try: + fd = os.open(file, os.O_RDONLY) + except: + continue + + os.close(fd) + + args = [ "mkdosfs", 'mkdosfs', '/tmp/floppy' ] + + cmd = "/usr/sbin/mkdosfs" + if os.access("/sbin/mkdosfs", os.X_OK): + cmd = "/sbin/mkdosfs" + + iutil.execWithRedirect (cmd, args, + stdout = '/dev/tty5', stderr = '/dev/tty5') + try: + isys.mount(device, "/tmp/crash", fstype = "vfat") + except SystemError: + continue + + out = open("/tmp/crash/anacdump.txt", "w") + p = Pickler(out) + + out.write(text) + + trace = tb + while trace.tb_next: + trace = trace.tb_next + frame = trace.tb_frame + out.write ("\nLocal variables in innermost frame:\n") + for (key, value) in frame.f_locals.items(): + out.write ("%s: %s\n" % (key, value)) + + out.write("\nToDo object:\n") + intf = todo.intf + todo.intf = None + todo.fstab = None + todo.comps = None + todo.hdList = None + + p.dump(todo) + + out.close() + isys.umount("/tmp/crash") + + intf.__del__ () + os.kill(os.getpid(), signal.SIGKILL) |