summaryrefslogtreecommitdiffstats
path: root/exception.py
diff options
context:
space:
mode:
authorMatt Wilson <msw@redhat.com>2000-07-12 20:05:46 +0000
committerMatt Wilson <msw@redhat.com>2000-07-12 20:05:46 +0000
commitf9b0aace80f9b2068e7f7882c3071c5069ae2b53 (patch)
tree81c96f35a6897e784dd04fdfc641120144ba7c08 /exception.py
parent4c8bdafebc9299559041cec222f33512dfb3577e (diff)
downloadanaconda-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.py82
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)