##// END OF EJS Templates
errors: move Abort earlier, so more exceptions can subclass it...
Martin von Zweigbergk -
r48070:5e736d2e default
parent child Browse files
Show More
@@ -51,6 +51,39 b' class Hint(object):'
51 super(Hint, self).__init__(*args, **kw)
51 super(Hint, self).__init__(*args, **kw)
52
52
53
53
54 class Abort(Hint, Exception):
55 """Raised if a command needs to print an error and exit."""
56
57 def __init__(self, message, hint=None, detailed_exit_code=None):
58 # type: (bytes, Optional[bytes]) -> None
59 self.message = message
60 self.hint = hint
61 self.detailed_exit_code = detailed_exit_code
62 # Pass the message into the Exception constructor to help extensions
63 # that look for exc.args[0].
64 Exception.__init__(self, message)
65
66 def __bytes__(self):
67 return self.message
68
69 if pycompat.ispy3:
70
71 def __str__(self):
72 # the output would be unreadable if the message was translated,
73 # but do not replace it with encoding.strfromlocal(), which
74 # may raise another exception.
75 return pycompat.sysstr(self.__bytes__())
76
77 def format(self):
78 # type: () -> bytes
79 from .i18n import _
80
81 message = _(b"abort: %s\n") % self.message
82 if self.hint:
83 message += _(b"(%s)\n") % self.hint
84 return message
85
86
54 class StorageError(Hint, Exception):
87 class StorageError(Hint, Exception):
55 """Raised when an error occurs in a storage layer.
88 """Raised when an error occurs in a storage layer.
56
89
@@ -182,39 +215,6 b' class ConflictResolutionRequired(Interve'
182 )
215 )
183
216
184
217
185 class Abort(Hint, Exception):
186 """Raised if a command needs to print an error and exit."""
187
188 def __init__(self, message, hint=None, detailed_exit_code=None):
189 # type: (bytes, Optional[bytes]) -> None
190 self.message = message
191 self.hint = hint
192 self.detailed_exit_code = detailed_exit_code
193 # Pass the message into the Exception constructor to help extensions
194 # that look for exc.args[0].
195 Exception.__init__(self, message)
196
197 def __bytes__(self):
198 return self.message
199
200 if pycompat.ispy3:
201
202 def __str__(self):
203 # the output would be unreadable if the message was translated,
204 # but do not replace it with encoding.strfromlocal(), which
205 # may raise another exception.
206 return pycompat.sysstr(self.__bytes__())
207
208 def format(self):
209 # type: () -> bytes
210 from .i18n import _
211
212 message = _(b"abort: %s\n") % self.message
213 if self.hint:
214 message += _(b"(%s)\n") % self.hint
215 return message
216
217
218 class InputError(Abort):
218 class InputError(Abort):
219 """Indicates that the user made an error in their input.
219 """Indicates that the user made an error in their input.
220
220
General Comments 0
You need to be logged in to leave comments. Login now