Patchwork [4,of,4] debugshell: check ui.debugger for which debugger to use

login
register
mail settings
Submitter Sean Farley
Date Sept. 20, 2013, 8:28 p.m.
Message ID <d50dff88d0e8477896f4.1379708913@laptop.local>
Download mbox | patch
Permalink /patch/2582/
State Accepted
Commit 51799a965446235f88a30e7bdcd0a488e140aaa8
Headers show

Comments

Sean Farley - Sept. 20, 2013, 8:28 p.m.
# HG changeset patch
# User Sean Farley <sean.michael.farley@gmail.com>
# Date 1373822200 18000
#      Sun Jul 14 12:16:40 2013 -0500
# Node ID d50dff88d0e8477896f49eec885c379ed16f90d4
# Parent  4c1a591f6674905b8b2ecd09ae2a85de0ba7e84c
debugshell: check ui.debugger for which debugger to use

Patch

diff --git a/contrib/debugshell.py b/contrib/debugshell.py
--- a/contrib/debugshell.py
+++ b/contrib/debugshell.py
@@ -1,8 +1,9 @@ 
 # debugshell extension
 """a python shell with repo, changelog & manifest objects"""
 
+import sys
 import mercurial
 import code
 
 def pdb(ui, repo, msg, **opts):
     objects = {
@@ -25,10 +26,27 @@ 
 def debugshell(ui, repo, **opts):
     bannermsg = "loaded repo : %s\n" \
                 "using source: %s" % (repo.root,
                                       mercurial.__path__[0])
 
-    pdb(ui, repo, bannermsg, **opts)
+    pdbmap = {
+        'pdb'  : 'code',
+        'ipdb' : 'IPython'
+    }
+
+    debugger = ui.config("ui", "debugger")
+    if not debugger:
+        debugger = 'pdb'
+
+    # if IPython doesn't exist, fallback to code.interact
+    try:
+        __import__(pdbmap[debugger])
+    except ImportError:
+        ui.warn("%s debugger specified but %s module was not found\n"
+                % (debugger, pdbmap[debugger]))
+        debugger = 'pdb'
+
+    getattr(sys.modules[__name__], debugger)(ui, repo, bannermsg, **opts)
 
 cmdtable = {
     "debugshell|dbsh|db": (debugshell, [])
 }