contrib/debugshell.py
author Matt Harbison <matt_harbison@yahoo.com>
Thu, 03 Oct 2024 21:08:10 -0400
changeset 51949 a8e1ff9ac257
parent 48875 6000f5b25c9b
permissions -rw-r--r--
tests: fix a test hang on Windows when setting a debuglock I have no idea why, but running the `hg -R auto-upgrade debuglock --set-lock` command near the end of `test-upgrade-repo.t` hangs the test. It does background the process and `killdaemons.py` runs without error, but control doesn't return to `run-tests.py` until the process is manually killed. I did notice that `$!` in MSYS is *not* the PID of the process that got backgrounded, even when a simple `sleep 60 &` is run in MSYS without the *.t file. When `killdaemons.py` is run manually with the PID in ProcessExplorer, the backgrounded process terminates immediately, and returns control to `run-tests.py`. This looks like it would be a race, but the test waits 10s for the lock file to appear before attempting to kill the process, so there's time. `hg serve` has a `--pid-file` option to write the pid to the file, but this is only a debug command, so I'm not bothering with cluttering the command line.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11633
6b7b99867ada contrib: add debugshell extension
Vishakh H <vsh426@gmail.com>
parents:
diff changeset
     1
# debugshell extension
6b7b99867ada contrib: add debugshell extension
Vishakh H <vsh426@gmail.com>
parents:
diff changeset
     2
"""a python shell with repo, changelog & manifest objects"""
6b7b99867ada contrib: add debugshell extension
Vishakh H <vsh426@gmail.com>
parents:
diff changeset
     3
28476
e28dc6de38e7 debugshell: use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27721
diff changeset
     4
import code
11633
6b7b99867ada contrib: add debugshell extension
Vishakh H <vsh426@gmail.com>
parents:
diff changeset
     5
import mercurial
28476
e28dc6de38e7 debugshell: use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents: 27721
diff changeset
     6
import sys
27721
e4b512bb6386 debugshell: disable demand importer when importing debugger
Gregory Szorc <gregory.szorc@gmail.com>
parents: 21243
diff changeset
     7
from mercurial import (
e4b512bb6386 debugshell: disable demand importer when importing debugger
Gregory Szorc <gregory.szorc@gmail.com>
parents: 21243
diff changeset
     8
    demandimport,
41814
b10bbbe995eb py3: make contrib/debugshell.py work with Python 3
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 41759
diff changeset
     9
    pycompat,
32337
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 30375
diff changeset
    10
    registrar,
27721
e4b512bb6386 debugshell: disable demand importer when importing debugger
Gregory Szorc <gregory.szorc@gmail.com>
parents: 21243
diff changeset
    11
)
21243
8b5c039f2b4f debugshell: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 19794
diff changeset
    12
8b5c039f2b4f debugshell: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents: 19794
diff changeset
    13
cmdtable = {}
32337
46ba2cdda476 registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents: 30375
diff changeset
    14
command = registrar.command(cmdtable)
11633
6b7b99867ada contrib: add debugshell extension
Vishakh H <vsh426@gmail.com>
parents:
diff changeset
    15
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41814
diff changeset
    16
19771
3bc675361206 debugshell: abstract out pdb code.interact
Sean Farley <sean.michael.farley@gmail.com>
parents: 11633
diff changeset
    17
def pdb(ui, repo, msg, **opts):
11633
6b7b99867ada contrib: add debugshell extension
Vishakh H <vsh426@gmail.com>
parents:
diff changeset
    18
    objects = {
6b7b99867ada contrib: add debugshell extension
Vishakh H <vsh426@gmail.com>
parents:
diff changeset
    19
        'mercurial': mercurial,
6b7b99867ada contrib: add debugshell extension
Vishakh H <vsh426@gmail.com>
parents:
diff changeset
    20
        'repo': repo,
6b7b99867ada contrib: add debugshell extension
Vishakh H <vsh426@gmail.com>
parents:
diff changeset
    21
        'cl': repo.changelog,
30375
11b8b740d54a manifest: remove last uses of repo.manifest
Durham Goode <durham@fb.com>
parents: 29397
diff changeset
    22
        'mf': repo.manifestlog,
11633
6b7b99867ada contrib: add debugshell extension
Vishakh H <vsh426@gmail.com>
parents:
diff changeset
    23
    }
19771
3bc675361206 debugshell: abstract out pdb code.interact
Sean Farley <sean.michael.farley@gmail.com>
parents: 11633
diff changeset
    24
3bc675361206 debugshell: abstract out pdb code.interact
Sean Farley <sean.michael.farley@gmail.com>
parents: 11633
diff changeset
    25
    code.interact(msg, local=objects)
3bc675361206 debugshell: abstract out pdb code.interact
Sean Farley <sean.michael.farley@gmail.com>
parents: 11633
diff changeset
    26
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41814
diff changeset
    27
19772
6ccec36a1fd9 debugshell: add function to embed ipython
Sean Farley <sean.michael.farley@gmail.com>
parents: 19771
diff changeset
    28
def ipdb(ui, repo, msg, **opts):
6ccec36a1fd9 debugshell: add function to embed ipython
Sean Farley <sean.michael.farley@gmail.com>
parents: 19771
diff changeset
    29
    import IPython
6ccec36a1fd9 debugshell: add function to embed ipython
Sean Farley <sean.michael.farley@gmail.com>
parents: 19771
diff changeset
    30
6ccec36a1fd9 debugshell: add function to embed ipython
Sean Farley <sean.michael.farley@gmail.com>
parents: 19771
diff changeset
    31
    cl = repo.changelog
30375
11b8b740d54a manifest: remove last uses of repo.manifest
Durham Goode <durham@fb.com>
parents: 29397
diff changeset
    32
    mf = repo.manifestlog
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41814
diff changeset
    33
    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
    34
6ccec36a1fd9 debugshell: add function to embed ipython
Sean Farley <sean.michael.farley@gmail.com>
parents: 19771
diff changeset
    35
    IPython.embed()
6ccec36a1fd9 debugshell: add function to embed ipython
Sean Farley <sean.michael.farley@gmail.com>
parents: 19771
diff changeset
    36
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41814
diff changeset
    37
41814
b10bbbe995eb py3: make contrib/debugshell.py work with Python 3
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 41759
diff changeset
    38
@command(b'debugshell|dbsh', [])
19771
3bc675361206 debugshell: abstract out pdb code.interact
Sean Farley <sean.michael.farley@gmail.com>
parents: 11633
diff changeset
    39
def debugshell(ui, repo, **opts):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41814
diff changeset
    40
    bannermsg = "loaded repo : %s\n" "using source: %s" % (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41814
diff changeset
    41
        pycompat.sysstr(repo.root),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41814
diff changeset
    42
        mercurial.__path__[0],
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41814
diff changeset
    43
    )
19771
3bc675361206 debugshell: abstract out pdb code.interact
Sean Farley <sean.michael.farley@gmail.com>
parents: 11633
diff changeset
    44
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41814
diff changeset
    45
    pdbmap = {'pdb': 'code', 'ipdb': 'IPython'}
19773
51799a965446 debugshell: check ui.debugger for which debugger to use
Sean Farley <sean.michael.farley@gmail.com>
parents: 19772
diff changeset
    46
41814
b10bbbe995eb py3: make contrib/debugshell.py work with Python 3
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 41759
diff changeset
    47
    debugger = ui.config(b"ui", b"debugger")
19773
51799a965446 debugshell: check ui.debugger for which debugger to use
Sean Farley <sean.michael.farley@gmail.com>
parents: 19772
diff changeset
    48
    if not debugger:
51799a965446 debugshell: check ui.debugger for which debugger to use
Sean Farley <sean.michael.farley@gmail.com>
parents: 19772
diff changeset
    49
        debugger = 'pdb'
41814
b10bbbe995eb py3: make contrib/debugshell.py work with Python 3
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 41759
diff changeset
    50
    else:
b10bbbe995eb py3: make contrib/debugshell.py work with Python 3
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 41759
diff changeset
    51
        debugger = pycompat.sysstr(debugger)
19773
51799a965446 debugshell: check ui.debugger for which debugger to use
Sean Farley <sean.michael.farley@gmail.com>
parents: 19772
diff changeset
    52
51799a965446 debugshell: check ui.debugger for which debugger to use
Sean Farley <sean.michael.farley@gmail.com>
parents: 19772
diff changeset
    53
    # 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
    54
    try:
27721
e4b512bb6386 debugshell: disable demand importer when importing debugger
Gregory Szorc <gregory.szorc@gmail.com>
parents: 21243
diff changeset
    55
        with demandimport.deactivated():
e4b512bb6386 debugshell: disable demand importer when importing debugger
Gregory Szorc <gregory.szorc@gmail.com>
parents: 21243
diff changeset
    56
            __import__(pdbmap[debugger])
19773
51799a965446 debugshell: check ui.debugger for which debugger to use
Sean Farley <sean.michael.farley@gmail.com>
parents: 19772
diff changeset
    57
    except ImportError:
43080
86e4daa2d54c cleanup: mark some ui.(status|note|warn|write) calls as not needing i18n
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
    58
        ui.warnnoi18n(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41814
diff changeset
    59
            b"%s debugger specified but %s module was not found\n"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41814
diff changeset
    60
            % (debugger, pdbmap[debugger])
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 41814
diff changeset
    61
        )
41814
b10bbbe995eb py3: make contrib/debugshell.py work with Python 3
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 41759
diff changeset
    62
        debugger = b'pdb'
19773
51799a965446 debugshell: check ui.debugger for which debugger to use
Sean Farley <sean.michael.farley@gmail.com>
parents: 19772
diff changeset
    63
51799a965446 debugshell: check ui.debugger for which debugger to use
Sean Farley <sean.michael.farley@gmail.com>
parents: 19772
diff changeset
    64
    getattr(sys.modules[__name__], debugger)(ui, repo, bannermsg, **opts)