mercurial/dispatch.py
changeset 7645 020a896a5292
parent 7644 182b7114d35a
child 7646 e62a456b8dc5
equal deleted inserted replaced
7644:182b7114d35a 7645:020a896a5292
    46             if '--debugger' in args:
    46             if '--debugger' in args:
    47                 pdb.post_mortem(sys.exc_info()[2])
    47                 pdb.post_mortem(sys.exc_info()[2])
    48             ui.print_exc()
    48             ui.print_exc()
    49             raise
    49             raise
    50 
    50 
    51     except error.ParseError, inst:
    51     # Global exception handling, alphabetically
    52         if inst.args[0]:
    52     # Mercurial-specific first, followed by built-in and library exceptions
    53             ui.warn(_("hg %s: %s\n") % (inst.args[0], inst.args[1]))
       
    54             commands.help_(ui, inst.args[0])
       
    55         else:
       
    56             ui.warn(_("hg: %s\n") % inst.args[1])
       
    57             commands.help_(ui, 'shortlist')
       
    58     except error.AmbiguousCommand, inst:
    53     except error.AmbiguousCommand, inst:
    59         ui.warn(_("hg: command '%s' is ambiguous:\n    %s\n") %
    54         ui.warn(_("hg: command '%s' is ambiguous:\n    %s\n") %
    60                 (inst.args[0], " ".join(inst.args[1])))
    55                 (inst.args[0], " ".join(inst.args[1])))
    61     except error.UnknownCommand, inst:
       
    62         ui.warn(_("hg: unknown command '%s'\n") % inst.args[0])
       
    63         commands.help_(ui, 'shortlist')
       
    64     except error.RepoError, inst:
       
    65         ui.warn(_("abort: %s!\n") % inst)
       
    66     except error.LockHeld, inst:
    56     except error.LockHeld, inst:
    67         if inst.errno == errno.ETIMEDOUT:
    57         if inst.errno == errno.ETIMEDOUT:
    68             reason = _('timed out waiting for lock held by %s') % inst.locker
    58             reason = _('timed out waiting for lock held by %s') % inst.locker
    69         else:
    59         else:
    70             reason = _('lock held by %s') % inst.locker
    60             reason = _('lock held by %s') % inst.locker
    71         ui.warn(_("abort: %s: %s\n") % (inst.desc or inst.filename, reason))
    61         ui.warn(_("abort: %s: %s\n") % (inst.desc or inst.filename, reason))
    72     except error.LockUnavailable, inst:
    62     except error.LockUnavailable, inst:
    73         ui.warn(_("abort: could not lock %s: %s\n") %
    63         ui.warn(_("abort: could not lock %s: %s\n") %
    74                (inst.desc or inst.filename, inst.strerror))
    64                (inst.desc or inst.filename, inst.strerror))
       
    65     except error.ParseError, inst:
       
    66         if inst.args[0]:
       
    67             ui.warn(_("hg %s: %s\n") % (inst.args[0], inst.args[1]))
       
    68             commands.help_(ui, inst.args[0])
       
    69         else:
       
    70             ui.warn(_("hg: %s\n") % inst.args[1])
       
    71             commands.help_(ui, 'shortlist')
       
    72     except error.RepoError, inst:
       
    73         ui.warn(_("abort: %s!\n") % inst)
       
    74     except error.ResponseError, inst:
       
    75         ui.warn(_("abort: %s") % inst.args[0])
       
    76         if not isinstance(inst.args[1], basestring):
       
    77             ui.warn(" %r\n" % (inst.args[1],))
       
    78         elif not inst.args[1]:
       
    79             ui.warn(_(" empty string\n"))
       
    80         else:
       
    81             ui.warn("\n%r\n" % util.ellipsis(inst.args[1]))
    75     except error.RevlogError, inst:
    82     except error.RevlogError, inst:
    76         ui.warn(_("abort: %s!\n") % inst)
    83         ui.warn(_("abort: %s!\n") % inst)
    77     except error.SignalInterrupt:
    84     except error.SignalInterrupt:
    78         ui.warn(_("killed!\n"))
    85         ui.warn(_("killed!\n"))
    79     except KeyboardInterrupt:
    86     except error.UnknownCommand, inst:
    80         try:
    87         ui.warn(_("hg: unknown command '%s'\n") % inst.args[0])
    81             ui.warn(_("interrupted!\n"))
    88         commands.help_(ui, 'shortlist')
    82         except IOError, inst:
    89     except util.Abort, inst:
    83             if inst.errno == errno.EPIPE:
    90         ui.warn(_("abort: %s\n") % inst)
    84                 if ui.debugflag:
    91     except ImportError, inst:
    85                     ui.warn(_("\nbroken pipe\n"))
    92         m = str(inst).split()[-1]
    86             else:
    93         ui.warn(_("abort: could not import module %s!\n") % m)
    87                 raise
    94         if m in "mpatch bdiff".split():
    88     except socket.error, inst:
    95             ui.warn(_("(did you forget to compile extensions?)\n"))
    89         ui.warn(_("abort: %s\n") % inst.args[-1])
    96         elif m in "zlib".split():
       
    97             ui.warn(_("(is your Python install correct?)\n"))
    90     except IOError, inst:
    98     except IOError, inst:
    91         if hasattr(inst, "code"):
    99         if hasattr(inst, "code"):
    92             ui.warn(_("abort: %s\n") % inst)
   100             ui.warn(_("abort: %s\n") % inst)
    93         elif hasattr(inst, "reason"):
   101         elif hasattr(inst, "reason"):
    94             try: # usually it is in the form (errno, strerror)
   102             try: # usually it is in the form (errno, strerror)
   109     except OSError, inst:
   117     except OSError, inst:
   110         if getattr(inst, "filename", None):
   118         if getattr(inst, "filename", None):
   111             ui.warn(_("abort: %s: %s\n") % (inst.strerror, inst.filename))
   119             ui.warn(_("abort: %s: %s\n") % (inst.strerror, inst.filename))
   112         else:
   120         else:
   113             ui.warn(_("abort: %s\n") % inst.strerror)
   121             ui.warn(_("abort: %s\n") % inst.strerror)
   114     except error.ResponseError, inst:
   122     except KeyboardInterrupt:
   115         ui.warn(_("abort: %s") % inst.args[0])
   123         try:
   116         if not isinstance(inst.args[1], basestring):
   124             ui.warn(_("interrupted!\n"))
   117             ui.warn(" %r\n" % (inst.args[1],))
   125         except IOError, inst:
   118         elif not inst.args[1]:
   126             if inst.errno == errno.EPIPE:
   119             ui.warn(_(" empty string\n"))
   127                 if ui.debugflag:
   120         else:
   128                     ui.warn(_("\nbroken pipe\n"))
   121             ui.warn("\n%r\n" % util.ellipsis(inst.args[1]))
   129             else:
   122     except ImportError, inst:
   130                 raise
   123         m = str(inst).split()[-1]
       
   124         ui.warn(_("abort: could not import module %s!\n") % m)
       
   125         if m in "mpatch bdiff".split():
       
   126             ui.warn(_("(did you forget to compile extensions?)\n"))
       
   127         elif m in "zlib".split():
       
   128             ui.warn(_("(is your Python install correct?)\n"))
       
   129 
       
   130     except util.Abort, inst:
       
   131         ui.warn(_("abort: %s\n") % inst)
       
   132     except MemoryError:
   131     except MemoryError:
   133         ui.warn(_("abort: out of memory\n"))
   132         ui.warn(_("abort: out of memory\n"))
   134     except SystemExit, inst:
   133     except SystemExit, inst:
   135         # Commands shouldn't sys.exit directly, but give a return code.
   134         # Commands shouldn't sys.exit directly, but give a return code.
   136         # Just in case catch this and and pass exit code to caller.
   135         # Just in case catch this and and pass exit code to caller.
   137         return inst.code
   136         return inst.code
       
   137     except socket.error, inst:
       
   138         ui.warn(_("abort: %s\n") % inst.args[-1])
   138     except:
   139     except:
   139         ui.warn(_("** unknown exception encountered, details follow\n"))
   140         ui.warn(_("** unknown exception encountered, details follow\n"))
   140         ui.warn(_("** report bug details to "
   141         ui.warn(_("** report bug details to "
   141                  "http://www.selenic.com/mercurial/bts\n"))
   142                  "http://www.selenic.com/mercurial/bts\n"))
   142         ui.warn(_("** or mercurial@selenic.com\n"))
   143         ui.warn(_("** or mercurial@selenic.com\n"))