Patchwork [3,of,4] debugshell: add function to embed ipython

login
register
mail settings
Submitter Sean Farley
Date Sept. 20, 2013, 8:28 p.m.
Message ID <4c1a591f6674905b8b2e.1379708912@laptop.local>
Download mbox | patch
Permalink /patch/2581/
State Accepted
Commit 6ccec36a1fd9a55dc64ad9c62d4feb5ce6d19a5c
Headers show

Comments

Sean Farley - Sept. 20, 2013, 8:28 p.m.
# HG changeset patch
# User Sean Farley <sean.michael.farley@gmail.com>
# Date 1373821356 18000
#      Sun Jul 14 12:02:36 2013 -0500
# Node ID 4c1a591f6674905b8b2ecd09ae2a85de0ba7e84c
# Parent  aa9ff65add03b8e535c115c67d5c12c64231b019
debugshell: add function to embed ipython
Sean Farley - Sept. 22, 2013, 4:27 a.m.
kbullock+mercurial@ringworld.org writes:

> On 20 Sep 2013, at 3:28 PM, Sean Farley wrote:
>
>> # HG changeset patch
>> # User Sean Farley <sean.michael.farley@gmail.com>
>> # Date 1373821356 18000
>> #      Sun Jul 14 12:02:36 2013 -0500
>> # Node ID 4c1a591f6674905b8b2ecd09ae2a85de0ba7e84c
>> # Parent  aa9ff65add03b8e535c115c67d5c12c64231b019
>> debugshell: add function to embed ipython
>> 
>> diff --git a/contrib/debugshell.py b/contrib/debugshell.py
>> --- a/contrib/debugshell.py
>> +++ b/contrib/debugshell.py
>> @@ -12,10 +12,18 @@
>>         'mf': repo.manifest,
>>     }
>> 
>>     code.interact(msg, local=objects)
>> 
>> +def ipdb(ui, repo, msg, **opts):
>> +    import IPython
>> +
>> +    cl = repo.changelog
>> +    mf = repo.manifest
>
> Do ipdb users not also get 'mercurial' and 'repo', or do these come in automagically because of the way we're sucking in IPython?

It's because IPython doesn't have code.interact and instead needs to be
called with IPython.embed() which doesn't take a 'local=objects'
parameter.

Patch

diff --git a/contrib/debugshell.py b/contrib/debugshell.py
--- a/contrib/debugshell.py
+++ b/contrib/debugshell.py
@@ -12,10 +12,18 @@ 
         'mf': repo.manifest,
     }
 
     code.interact(msg, local=objects)
 
+def ipdb(ui, repo, msg, **opts):
+    import IPython
+
+    cl = repo.changelog
+    mf = repo.manifest
+
+    IPython.embed()
+
 def debugshell(ui, repo, **opts):
     bannermsg = "loaded repo : %s\n" \
                 "using source: %s" % (repo.root,
                                       mercurial.__path__[0])