Mercurial > hg
annotate contrib/debugshell.py @ 26836:88c4e97b9669 stable
scmutil: abort if an empty revision is given to revpair()
When using 'extdiff --patch' to check the changes in a rebase, 'precursors(x)'
evaluated to an empty set because I forgot the --hidden flag, so the other
revision was used as the replacement for the empty set. The result was the
patch for the other revision was diffed against itself, and the tool saying
there were no differences. That's misleading since the expected diff args were
silently changed, so it's better to bail out.
The other uses of scmutil.revpair() are commands.diff and commands.status, and
it doesn't make sense to allow an empty revision there either. The code here
was suggested by Yuya Nishihara.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Sat, 31 Oct 2015 21:45:46 -0400 |
parents | 8b5c039f2b4f |
children | e4b512bb6386 |
rev | line source |
---|---|
11633 | 1 # debugshell extension |
2 """a python shell with repo, changelog & manifest objects""" | |
3 | |
19773
51799a965446
debugshell: check ui.debugger for which debugger to use
Sean Farley <sean.michael.farley@gmail.com>
parents:
19772
diff
changeset
|
4 import sys |
11633 | 5 import mercurial |
6 import code | |
21243
8b5c039f2b4f
debugshell: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
19794
diff
changeset
|
7 from mercurial import cmdutil |
8b5c039f2b4f
debugshell: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
19794
diff
changeset
|
8 |
8b5c039f2b4f
debugshell: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
19794
diff
changeset
|
9 cmdtable = {} |
8b5c039f2b4f
debugshell: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
19794
diff
changeset
|
10 command = cmdutil.command(cmdtable) |
11633 | 11 |
19771
3bc675361206
debugshell: abstract out pdb code.interact
Sean Farley <sean.michael.farley@gmail.com>
parents:
11633
diff
changeset
|
12 def pdb(ui, repo, msg, **opts): |
11633 | 13 objects = { |
14 'mercurial': mercurial, | |
15 'repo': repo, | |
16 'cl': repo.changelog, | |
17 'mf': repo.manifest, | |
18 } | |
19771
3bc675361206
debugshell: abstract out pdb code.interact
Sean Farley <sean.michael.farley@gmail.com>
parents:
11633
diff
changeset
|
19 |
3bc675361206
debugshell: abstract out pdb code.interact
Sean Farley <sean.michael.farley@gmail.com>
parents:
11633
diff
changeset
|
20 code.interact(msg, local=objects) |
3bc675361206
debugshell: abstract out pdb code.interact
Sean Farley <sean.michael.farley@gmail.com>
parents:
11633
diff
changeset
|
21 |
19772
6ccec36a1fd9
debugshell: add function to embed ipython
Sean Farley <sean.michael.farley@gmail.com>
parents:
19771
diff
changeset
|
22 def ipdb(ui, repo, msg, **opts): |
6ccec36a1fd9
debugshell: add function to embed ipython
Sean Farley <sean.michael.farley@gmail.com>
parents:
19771
diff
changeset
|
23 import IPython |
6ccec36a1fd9
debugshell: add function to embed ipython
Sean Farley <sean.michael.farley@gmail.com>
parents:
19771
diff
changeset
|
24 |
6ccec36a1fd9
debugshell: add function to embed ipython
Sean Farley <sean.michael.farley@gmail.com>
parents:
19771
diff
changeset
|
25 cl = repo.changelog |
6ccec36a1fd9
debugshell: add function to embed ipython
Sean Farley <sean.michael.farley@gmail.com>
parents:
19771
diff
changeset
|
26 mf = repo.manifest |
19794
cccc44304b2c
debugshell: appease pyflakes
Matt Mackall <mpm@selenic.com>
parents:
19773
diff
changeset
|
27 cl, mf # use variables to appease pyflakes |
19772
6ccec36a1fd9
debugshell: add function to embed ipython
Sean Farley <sean.michael.farley@gmail.com>
parents:
19771
diff
changeset
|
28 |
6ccec36a1fd9
debugshell: add function to embed ipython
Sean Farley <sean.michael.farley@gmail.com>
parents:
19771
diff
changeset
|
29 IPython.embed() |
6ccec36a1fd9
debugshell: add function to embed ipython
Sean Farley <sean.michael.farley@gmail.com>
parents:
19771
diff
changeset
|
30 |
21243
8b5c039f2b4f
debugshell: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
19794
diff
changeset
|
31 @command('debugshell|dbsh', []) |
19771
3bc675361206
debugshell: abstract out pdb code.interact
Sean Farley <sean.michael.farley@gmail.com>
parents:
11633
diff
changeset
|
32 def debugshell(ui, repo, **opts): |
11633 | 33 bannermsg = "loaded repo : %s\n" \ |
34 "using source: %s" % (repo.root, | |
35 mercurial.__path__[0]) | |
19771
3bc675361206
debugshell: abstract out pdb code.interact
Sean Farley <sean.michael.farley@gmail.com>
parents:
11633
diff
changeset
|
36 |
19773
51799a965446
debugshell: check ui.debugger for which debugger to use
Sean Farley <sean.michael.farley@gmail.com>
parents:
19772
diff
changeset
|
37 pdbmap = { |
51799a965446
debugshell: check ui.debugger for which debugger to use
Sean Farley <sean.michael.farley@gmail.com>
parents:
19772
diff
changeset
|
38 'pdb' : 'code', |
51799a965446
debugshell: check ui.debugger for which debugger to use
Sean Farley <sean.michael.farley@gmail.com>
parents:
19772
diff
changeset
|
39 'ipdb' : 'IPython' |
51799a965446
debugshell: check ui.debugger for which debugger to use
Sean Farley <sean.michael.farley@gmail.com>
parents:
19772
diff
changeset
|
40 } |
51799a965446
debugshell: check ui.debugger for which debugger to use
Sean Farley <sean.michael.farley@gmail.com>
parents:
19772
diff
changeset
|
41 |
51799a965446
debugshell: check ui.debugger for which debugger to use
Sean Farley <sean.michael.farley@gmail.com>
parents:
19772
diff
changeset
|
42 debugger = ui.config("ui", "debugger") |
51799a965446
debugshell: check ui.debugger for which debugger to use
Sean Farley <sean.michael.farley@gmail.com>
parents:
19772
diff
changeset
|
43 if not debugger: |
51799a965446
debugshell: check ui.debugger for which debugger to use
Sean Farley <sean.michael.farley@gmail.com>
parents:
19772
diff
changeset
|
44 debugger = 'pdb' |
51799a965446
debugshell: check ui.debugger for which debugger to use
Sean Farley <sean.michael.farley@gmail.com>
parents:
19772
diff
changeset
|
45 |
51799a965446
debugshell: check ui.debugger for which debugger to use
Sean Farley <sean.michael.farley@gmail.com>
parents:
19772
diff
changeset
|
46 # if IPython doesn't exist, fallback to code.interact |
51799a965446
debugshell: check ui.debugger for which debugger to use
Sean Farley <sean.michael.farley@gmail.com>
parents:
19772
diff
changeset
|
47 try: |
51799a965446
debugshell: check ui.debugger for which debugger to use
Sean Farley <sean.michael.farley@gmail.com>
parents:
19772
diff
changeset
|
48 __import__(pdbmap[debugger]) |
51799a965446
debugshell: check ui.debugger for which debugger to use
Sean Farley <sean.michael.farley@gmail.com>
parents:
19772
diff
changeset
|
49 except ImportError: |
51799a965446
debugshell: check ui.debugger for which debugger to use
Sean Farley <sean.michael.farley@gmail.com>
parents:
19772
diff
changeset
|
50 ui.warn("%s debugger specified but %s module was not found\n" |
51799a965446
debugshell: check ui.debugger for which debugger to use
Sean Farley <sean.michael.farley@gmail.com>
parents:
19772
diff
changeset
|
51 % (debugger, pdbmap[debugger])) |
51799a965446
debugshell: check ui.debugger for which debugger to use
Sean Farley <sean.michael.farley@gmail.com>
parents:
19772
diff
changeset
|
52 debugger = 'pdb' |
51799a965446
debugshell: check ui.debugger for which debugger to use
Sean Farley <sean.michael.farley@gmail.com>
parents:
19772
diff
changeset
|
53 |
51799a965446
debugshell: check ui.debugger for which debugger to use
Sean Farley <sean.michael.farley@gmail.com>
parents:
19772
diff
changeset
|
54 getattr(sys.modules[__name__], debugger)(ui, repo, bannermsg, **opts) |