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")) |