mercurial/dispatch.py
changeset 14438 08bfec2ef031
parent 14286 005a540e9aee
child 14439 80c599eee3f3
equal deleted inserted replaced
14437:cbe13e6bdc34 14438:08bfec2ef031
     9 import os, sys, atexit, signal, pdb, socket, errno, shlex, time, traceback, re
     9 import os, sys, atexit, signal, pdb, socket, errno, shlex, time, traceback, re
    10 import util, commands, hg, fancyopts, extensions, hook, error
    10 import util, commands, hg, fancyopts, extensions, hook, error
    11 import cmdutil, encoding
    11 import cmdutil, encoding
    12 import ui as uimod
    12 import ui as uimod
    13 
    13 
       
    14 class request(object):
       
    15     def __init__(self, args):
       
    16         self.args = args
       
    17 
    14 def run():
    18 def run():
    15     "run the command in sys.argv"
    19     "run the command in sys.argv"
    16     sys.exit(dispatch(sys.argv[1:]))
    20     sys.exit(dispatch(request(sys.argv[1:])))
    17 
    21 
    18 def dispatch(args):
    22 def dispatch(req):
    19     "run the command specified in args"
    23     "run the command specified in req.args"
    20     try:
    24     try:
    21         u = uimod.ui()
    25         u = uimod.ui()
    22         if '--traceback' in args:
    26         if '--traceback' in req.args:
    23             u.setconfig('ui', 'traceback', 'on')
    27             u.setconfig('ui', 'traceback', 'on')
    24     except util.Abort, inst:
    28     except util.Abort, inst:
    25         sys.stderr.write(_("abort: %s\n") % inst)
    29         sys.stderr.write(_("abort: %s\n") % inst)
    26         if inst.hint:
    30         if inst.hint:
    27             sys.stderr.write(_("(%s)\n") % inst.hint)
    31             sys.stderr.write(_("(%s)\n") % inst.hint)
    31             sys.stderr.write(_("hg: parse error at %s: %s\n") %
    35             sys.stderr.write(_("hg: parse error at %s: %s\n") %
    32                              (inst.args[1], inst.args[0]))
    36                              (inst.args[1], inst.args[0]))
    33         else:
    37         else:
    34             sys.stderr.write(_("hg: parse error: %s\n") % inst.args[0])
    38             sys.stderr.write(_("hg: parse error: %s\n") % inst.args[0])
    35         return -1
    39         return -1
    36     return _runcatch(u, args)
    40     return _runcatch(u, req)
    37 
    41 
    38 def _runcatch(ui, args):
    42 def _runcatch(ui, req):
    39     def catchterm(*args):
    43     def catchterm(*args):
    40         raise error.SignalInterrupt
    44         raise error.SignalInterrupt
    41 
    45 
    42     try:
    46     try:
    43         for name in 'SIGBREAK', 'SIGHUP', 'SIGTERM':
    47         for name in 'SIGBREAK', 'SIGHUP', 'SIGTERM':
    48         pass # happens if called in a thread
    52         pass # happens if called in a thread
    49 
    53 
    50     try:
    54     try:
    51         try:
    55         try:
    52             # enter the debugger before command execution
    56             # enter the debugger before command execution
    53             if '--debugger' in args:
    57             if '--debugger' in req.args:
    54                 ui.warn(_("entering debugger - "
    58                 ui.warn(_("entering debugger - "
    55                         "type c to continue starting hg or h for help\n"))
    59                         "type c to continue starting hg or h for help\n"))
    56                 pdb.set_trace()
    60                 pdb.set_trace()
    57             try:
    61             try:
    58                 return _dispatch(ui, args)
    62                 return _dispatch(ui, req)
    59             finally:
    63             finally:
    60                 ui.flush()
    64                 ui.flush()
    61         except:
    65         except:
    62             # enter the debugger when we hit an exception
    66             # enter the debugger when we hit an exception
    63             if '--debugger' in args:
    67             if '--debugger' in req.args:
    64                 traceback.print_exc()
    68                 traceback.print_exc()
    65                 pdb.post_mortem(sys.exc_info()[2])
    69                 pdb.post_mortem(sys.exc_info()[2])
    66             ui.traceback()
    70             ui.traceback()
    67             raise
    71             raise
    68 
    72 
   484 
   488 
   485     commands.norepo = norepo
   489     commands.norepo = norepo
   486     os.chdir(cwd)
   490     os.chdir(cwd)
   487 
   491 
   488 _loaded = set()
   492 _loaded = set()
   489 def _dispatch(ui, args):
   493 def _dispatch(ui, req):
       
   494     args = req.args
   490     shellaliasfn = _checkshellalias(ui, args)
   495     shellaliasfn = _checkshellalias(ui, args)
   491     if shellaliasfn:
   496     if shellaliasfn:
   492         return shellaliasfn()
   497         return shellaliasfn()
   493 
   498 
   494     # read --config before doing anything else
   499     # read --config before doing anything else
   594             if cmd not in commands.optionalrepo.split():
   599             if cmd not in commands.optionalrepo.split():
   595                 if args and not path: # try to infer -R from command args
   600                 if args and not path: # try to infer -R from command args
   596                     repos = map(cmdutil.findrepo, args)
   601                     repos = map(cmdutil.findrepo, args)
   597                     guess = repos[0]
   602                     guess = repos[0]
   598                     if guess and repos.count(guess) == len(repos):
   603                     if guess and repos.count(guess) == len(repos):
   599                         return _dispatch(ui, ['--repository', guess] + fullargs)
   604                         req.args = ['--repository', guess] + fullargs
       
   605                         return _dispatch(ui, req)
   600                 if not path:
   606                 if not path:
   601                     raise error.RepoError(_("no repository found in %r"
   607                     raise error.RepoError(_("no repository found in %r"
   602                                             " (.hg not found)") % os.getcwd())
   608                                             " (.hg not found)") % os.getcwd())
   603                 raise
   609                 raise
   604         args.insert(0, repo)
   610         args.insert(0, repo)