equal
deleted
inserted
replaced
29 Union, |
29 Union, |
30 ) |
30 ) |
31 |
31 |
32 |
32 |
33 def _tobytes(exc): |
33 def _tobytes(exc): |
|
34 # type: (...) -> bytes |
34 """Byte-stringify exception in the same way as BaseException_str()""" |
35 """Byte-stringify exception in the same way as BaseException_str()""" |
35 if not exc.args: |
36 if not exc.args: |
36 return b'' |
37 return b'' |
37 if len(exc.args) == 1: |
38 if len(exc.args) == 1: |
38 return pycompat.bytestr(exc.args[0]) |
39 return pycompat.bytestr(exc.args[0]) |
45 This should come first in the inheritance list to consume a hint and |
46 This should come first in the inheritance list to consume a hint and |
46 pass remaining arguments to the exception class. |
47 pass remaining arguments to the exception class. |
47 """ |
48 """ |
48 |
49 |
49 def __init__(self, *args, **kw): |
50 def __init__(self, *args, **kw): |
50 self.hint = kw.pop('hint', None) |
51 self.hint = kw.pop('hint', None) # type: Optional[bytes] |
51 super(Hint, self).__init__(*args, **kw) |
52 super(Hint, self).__init__(*args, **kw) |
52 |
53 |
53 |
54 |
54 class Error(Hint, Exception): |
55 class Error(Hint, Exception): |
55 """Base class for Mercurial errors.""" |
56 """Base class for Mercurial errors.""" |
69 return self.message |
70 return self.message |
70 |
71 |
71 if pycompat.ispy3: |
72 if pycompat.ispy3: |
72 |
73 |
73 def __str__(self): |
74 def __str__(self): |
|
75 # type: () -> str |
74 # the output would be unreadable if the message was translated, |
76 # the output would be unreadable if the message was translated, |
75 # but do not replace it with encoding.strfromlocal(), which |
77 # but do not replace it with encoding.strfromlocal(), which |
76 # may raise another exception. |
78 # may raise another exception. |
77 return pycompat.sysstr(self.__bytes__()) |
79 return pycompat.sysstr(self.__bytes__()) |
78 |
80 |
103 pass |
105 pass |
104 |
106 |
105 |
107 |
106 class SidedataHashError(RevlogError): |
108 class SidedataHashError(RevlogError): |
107 def __init__(self, key, expected, got): |
109 def __init__(self, key, expected, got): |
|
110 # type: (int, bytes, bytes) -> None |
108 self.hint = None |
111 self.hint = None |
109 self.sidedatakey = key |
112 self.sidedatakey = key |
110 self.expecteddigest = expected |
113 self.expecteddigest = expected |
111 self.actualdigest = got |
114 self.actualdigest = got |
112 |
115 |
115 __bytes__ = _tobytes |
118 __bytes__ = _tobytes |
116 |
119 |
117 |
120 |
118 class LookupError(RevlogError, KeyError): |
121 class LookupError(RevlogError, KeyError): |
119 def __init__(self, name, index, message): |
122 def __init__(self, name, index, message): |
|
123 # type: (bytes, bytes, bytes) -> None |
120 self.name = name |
124 self.name = name |
121 self.index = index |
125 self.index = index |
122 # this can't be called 'message' because at least some installs of |
126 # this can't be called 'message' because at least some installs of |
123 # Python 2.6+ complain about the 'message' property being deprecated |
127 # Python 2.6+ complain about the 'message' property being deprecated |
124 self.lookupmessage = message |
128 self.lookupmessage = message |
341 |
345 |
342 class OutOfBandError(RemoteError): |
346 class OutOfBandError(RemoteError): |
343 """Exception raised when a remote repo reports failure""" |
347 """Exception raised when a remote repo reports failure""" |
344 |
348 |
345 def __init__(self, message=None, hint=None): |
349 def __init__(self, message=None, hint=None): |
|
350 # type: (Optional[bytes], Optional[bytes]) -> None |
346 from .i18n import _ |
351 from .i18n import _ |
347 |
352 |
348 if message: |
353 if message: |
349 # Abort.format() adds a trailing newline |
354 # Abort.format() adds a trailing newline |
350 message = _(b"remote error:\n%s") % message.rstrip(b'\n') |
355 message = _(b"remote error:\n%s") % message.rstrip(b'\n') |