mercurial/error.py
author Jun Wu <quark@fb.com>
Tue, 06 Dec 2016 14:57:47 +0000
changeset 30573 b0ebab239f90
parent 30332 318a24b52eeb
child 30585 0f865311ae3f
permissions -rw-r--r--
error: add ProgrammingError We have requirement to express "this is clearly an error caused by the programmer". The code base uses RuntimeError for that in some places, not ideal. So let's add a formal exception for that.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8226
8b2cd04a6e97 put license and copyright info into comment blocks
Martin Geisler <mg@lazybytes.net>
parents: 8225
diff changeset
     1
# error.py - Mercurial exceptions
8b2cd04a6e97 put license and copyright info into comment blocks
Martin Geisler <mg@lazybytes.net>
parents: 8225
diff changeset
     2
#
8b2cd04a6e97 put license and copyright info into comment blocks
Martin Geisler <mg@lazybytes.net>
parents: 8225
diff changeset
     3
# Copyright 2005-2008 Matt Mackall <mpm@selenic.com>
8b2cd04a6e97 put license and copyright info into comment blocks
Martin Geisler <mg@lazybytes.net>
parents: 8225
diff changeset
     4
#
8b2cd04a6e97 put license and copyright info into comment blocks
Martin Geisler <mg@lazybytes.net>
parents: 8225
diff changeset
     5
# This software may be used and distributed according to the terms of the
10263
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 9423
diff changeset
     6
# GNU General Public License version 2 or any later version.
7633
08cabecfa8a8 errors: move revlog errors
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
     7
8227
0a9542703300 turn some comments back into module docstrings
Martin Geisler <mg@lazybytes.net>
parents: 8226
diff changeset
     8
"""Mercurial exceptions.
0a9542703300 turn some comments back into module docstrings
Martin Geisler <mg@lazybytes.net>
parents: 8226
diff changeset
     9
0a9542703300 turn some comments back into module docstrings
Martin Geisler <mg@lazybytes.net>
parents: 8226
diff changeset
    10
This allows us to catch exceptions at higher levels without forcing
0a9542703300 turn some comments back into module docstrings
Martin Geisler <mg@lazybytes.net>
parents: 8226
diff changeset
    11
imports.
0a9542703300 turn some comments back into module docstrings
Martin Geisler <mg@lazybytes.net>
parents: 8226
diff changeset
    12
"""
0a9542703300 turn some comments back into module docstrings
Martin Geisler <mg@lazybytes.net>
parents: 8226
diff changeset
    13
25945
147bd9e238a1 error: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25484
diff changeset
    14
from __future__ import absolute_import
147bd9e238a1 error: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25484
diff changeset
    15
7633
08cabecfa8a8 errors: move revlog errors
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    16
# Do not import anything here, please
08cabecfa8a8 errors: move revlog errors
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    17
29509
945b4c14c570 error: make HintException a mix-in class not derived from BaseException (API)
Yuya Nishihara <yuya@tcha.org>
parents: 28141
diff changeset
    18
class Hint(object):
945b4c14c570 error: make HintException a mix-in class not derived from BaseException (API)
Yuya Nishihara <yuya@tcha.org>
parents: 28141
diff changeset
    19
    """Mix-in to provide a hint of an error
945b4c14c570 error: make HintException a mix-in class not derived from BaseException (API)
Yuya Nishihara <yuya@tcha.org>
parents: 28141
diff changeset
    20
29510
19205a0e2bf1 error: make hintable exceptions reject unknown keyword arguments (API)
Yuya Nishihara <yuya@tcha.org>
parents: 29509
diff changeset
    21
    This should come first in the inheritance list to consume a hint and
19205a0e2bf1 error: make hintable exceptions reject unknown keyword arguments (API)
Yuya Nishihara <yuya@tcha.org>
parents: 29509
diff changeset
    22
    pass remaining arguments to the exception class.
29509
945b4c14c570 error: make HintException a mix-in class not derived from BaseException (API)
Yuya Nishihara <yuya@tcha.org>
parents: 28141
diff changeset
    23
    """
25248
821e664924dc error: refactor common hint-pattern into a common base class
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 25242
diff changeset
    24
    def __init__(self, *args, **kw):
29510
19205a0e2bf1 error: make hintable exceptions reject unknown keyword arguments (API)
Yuya Nishihara <yuya@tcha.org>
parents: 29509
diff changeset
    25
        self.hint = kw.pop('hint', None)
19205a0e2bf1 error: make hintable exceptions reject unknown keyword arguments (API)
Yuya Nishihara <yuya@tcha.org>
parents: 29509
diff changeset
    26
        super(Hint, self).__init__(*args, **kw)
25248
821e664924dc error: refactor common hint-pattern into a common base class
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 25242
diff changeset
    27
29509
945b4c14c570 error: make HintException a mix-in class not derived from BaseException (API)
Yuya Nishihara <yuya@tcha.org>
parents: 28141
diff changeset
    28
class RevlogError(Hint, Exception):
7633
08cabecfa8a8 errors: move revlog errors
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    29
    pass
08cabecfa8a8 errors: move revlog errors
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    30
23014
f00813325c5a repoview: add a FilteredIndexError class
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23010
diff changeset
    31
class FilteredIndexError(IndexError):
f00813325c5a repoview: add a FilteredIndexError class
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23010
diff changeset
    32
    pass
f00813325c5a repoview: add a FilteredIndexError class
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23010
diff changeset
    33
7633
08cabecfa8a8 errors: move revlog errors
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    34
class LookupError(RevlogError, KeyError):
08cabecfa8a8 errors: move revlog errors
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    35
    def __init__(self, name, index, message):
08cabecfa8a8 errors: move revlog errors
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    36
        self.name = name
24038
10d02cd18604 error: store filename and message on LookupError for later
Martin von Zweigbergk <martinvonz@google.com>
parents: 23415
diff changeset
    37
        self.index = index
24137
dcfdfd63bde4 error.LookupError: rename 'message' property to something else
Siddharth Agarwal <sid0@fb.com>
parents: 24120
diff changeset
    38
        # this can't be called 'message' because at least some installs of
dcfdfd63bde4 error.LookupError: rename 'message' property to something else
Siddharth Agarwal <sid0@fb.com>
parents: 24120
diff changeset
    39
        # Python 2.6+ complain about the 'message' property being deprecated
dcfdfd63bde4 error.LookupError: rename 'message' property to something else
Siddharth Agarwal <sid0@fb.com>
parents: 24120
diff changeset
    40
        self.lookupmessage = message
7633
08cabecfa8a8 errors: move revlog errors
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    41
        if isinstance(name, str) and len(name) == 20:
25945
147bd9e238a1 error: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25484
diff changeset
    42
            from .node import short
7633
08cabecfa8a8 errors: move revlog errors
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    43
            name = short(name)
08cabecfa8a8 errors: move revlog errors
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    44
        RevlogError.__init__(self, '%s@%s: %s' % (index, name, message))
08cabecfa8a8 errors: move revlog errors
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    45
08cabecfa8a8 errors: move revlog errors
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    46
    def __str__(self):
08cabecfa8a8 errors: move revlog errors
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
    47
        return RevlogError.__str__(self)
7636
e3f8c6d6b72e error: move ParseError
Matt Mackall <mpm@selenic.com>
parents: 7633
diff changeset
    48
23015
21c44c1aed87 repoview: add a FilteredLookupError class
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23014
diff changeset
    49
class FilteredLookupError(LookupError):
21c44c1aed87 repoview: add a FilteredLookupError class
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23014
diff changeset
    50
    pass
21c44c1aed87 repoview: add a FilteredLookupError class
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23014
diff changeset
    51
18855
50c922c1b514 hgweb: show correct error message for i18n environment
Takumi IINO <trot.thunder@gmail.com>
parents: 15017
diff changeset
    52
class ManifestLookupError(LookupError):
50c922c1b514 hgweb: show correct error message for i18n environment
Takumi IINO <trot.thunder@gmail.com>
parents: 15017
diff changeset
    53
    pass
50c922c1b514 hgweb: show correct error message for i18n environment
Takumi IINO <trot.thunder@gmail.com>
parents: 15017
diff changeset
    54
11287
b901bb751999 error: change ParseError to CommandError
Matt Mackall <mpm@selenic.com>
parents: 10263
diff changeset
    55
class CommandError(Exception):
7636
e3f8c6d6b72e error: move ParseError
Matt Mackall <mpm@selenic.com>
parents: 7633
diff changeset
    56
    """Exception raised on errors in parsing the command line."""
7637
1d54e2f6c0b7 error: move repo errors
Matt Mackall <mpm@selenic.com>
parents: 7636
diff changeset
    57
29509
945b4c14c570 error: make HintException a mix-in class not derived from BaseException (API)
Yuya Nishihara <yuya@tcha.org>
parents: 28141
diff changeset
    58
class InterventionRequired(Hint, Exception):
18931
3c224e0949de error: introduce new InterventionRequired exception
Augie Fackler <raf@durin42.com>
parents: 18855
diff changeset
    59
    """Exception raised when a command requires human intervention."""
3c224e0949de error: introduce new InterventionRequired exception
Augie Fackler <raf@durin42.com>
parents: 18855
diff changeset
    60
29509
945b4c14c570 error: make HintException a mix-in class not derived from BaseException (API)
Yuya Nishihara <yuya@tcha.org>
parents: 28141
diff changeset
    61
class Abort(Hint, Exception):
11288
2123aad24d56 error: add new ParseError for various parsing errors
Matt Mackall <mpm@selenic.com>
parents: 11287
diff changeset
    62
    """Raised if a command needs to print an error and exit."""
2123aad24d56 error: add new ParseError for various parsing errors
Matt Mackall <mpm@selenic.com>
parents: 11287
diff changeset
    63
26692
8d1cfd77b64f hook: raise a separate exception for when loading a hook fails
Siddharth Agarwal <sid0@fb.com>
parents: 26683
diff changeset
    64
class HookLoadError(Abort):
8d1cfd77b64f hook: raise a separate exception for when loading a hook fails
Siddharth Agarwal <sid0@fb.com>
parents: 26683
diff changeset
    65
    """raised when loading a hook fails, aborting an operation
8d1cfd77b64f hook: raise a separate exception for when loading a hook fails
Siddharth Agarwal <sid0@fb.com>
parents: 26683
diff changeset
    66
8d1cfd77b64f hook: raise a separate exception for when loading a hook fails
Siddharth Agarwal <sid0@fb.com>
parents: 26683
diff changeset
    67
    Exists to allow more specialized catching."""
8d1cfd77b64f hook: raise a separate exception for when loading a hook fails
Siddharth Agarwal <sid0@fb.com>
parents: 26683
diff changeset
    68
23415
cdbb85489c41 hook: raise a more specialized HookAbort exception when a hook fails
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23016
diff changeset
    69
class HookAbort(Abort):
cdbb85489c41 hook: raise a more specialized HookAbort exception when a hook fails
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23016
diff changeset
    70
    """raised when a validation hook fails, aborting an operation
cdbb85489c41 hook: raise a more specialized HookAbort exception when a hook fails
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23016
diff changeset
    71
cdbb85489c41 hook: raise a more specialized HookAbort exception when a hook fails
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23016
diff changeset
    72
    Exists to allow more specialized catching."""
cdbb85489c41 hook: raise a more specialized HookAbort exception when a hook fails
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23016
diff changeset
    73
11288
2123aad24d56 error: add new ParseError for various parsing errors
Matt Mackall <mpm@selenic.com>
parents: 11287
diff changeset
    74
class ConfigError(Abort):
22359
e3714b927af5 error: use docstrings, not bare strings, for error classes
Mike Edgar <adgar@google.com>
parents: 21747
diff changeset
    75
    """Exception raised when parsing config files"""
8144
fca54469480e ui: introduce new config parser
Matt Mackall <mpm@selenic.com>
parents: 7947
diff changeset
    76
26683
634666c48b7d update: introduce a 'UpdateAbort' exception
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26640
diff changeset
    77
class UpdateAbort(Abort):
634666c48b7d update: introduce a 'UpdateAbort' exception
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26640
diff changeset
    78
    """Raised when an update is aborted for destination issue"""
634666c48b7d update: introduce a 'UpdateAbort' exception
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26640
diff changeset
    79
28141
13bb8de97f87 destutil: add more precise error classes for destmerge
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27628
diff changeset
    80
class MergeDestAbort(Abort):
13bb8de97f87 destutil: add more precise error classes for destmerge
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27628
diff changeset
    81
    """Raised when an update is aborted for destination issues"""
13bb8de97f87 destutil: add more precise error classes for destmerge
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27628
diff changeset
    82
13bb8de97f87 destutil: add more precise error classes for destmerge
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27628
diff changeset
    83
class NoMergeDestAbort(MergeDestAbort):
13bb8de97f87 destutil: add more precise error classes for destmerge
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27628
diff changeset
    84
    """Raised when an update is aborted because there is nothing to merge"""
13bb8de97f87 destutil: add more precise error classes for destmerge
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27628
diff changeset
    85
13bb8de97f87 destutil: add more precise error classes for destmerge
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27628
diff changeset
    86
class ManyMergeDestAbort(MergeDestAbort):
30332
318a24b52eeb spelling: fixes of non-dictionary words
Mads Kiilerich <madski@unity3d.com>
parents: 29536
diff changeset
    87
    """Raised when an update is aborted because destination is ambiguous"""
28141
13bb8de97f87 destutil: add more precise error classes for destmerge
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 27628
diff changeset
    88
26896
5e46123e6c35 error: add structured exception for EOF at prompt
Siddharth Agarwal <sid0@fb.com>
parents: 26693
diff changeset
    89
class ResponseExpected(Abort):
5e46123e6c35 error: add structured exception for EOF at prompt
Siddharth Agarwal <sid0@fb.com>
parents: 26693
diff changeset
    90
    """Raised when an EOF is received for a prompt"""
5e46123e6c35 error: add structured exception for EOF at prompt
Siddharth Agarwal <sid0@fb.com>
parents: 26693
diff changeset
    91
    def __init__(self):
5e46123e6c35 error: add structured exception for EOF at prompt
Siddharth Agarwal <sid0@fb.com>
parents: 26693
diff changeset
    92
        from .i18n import _
5e46123e6c35 error: add structured exception for EOF at prompt
Siddharth Agarwal <sid0@fb.com>
parents: 26693
diff changeset
    93
        Abort.__init__(self, _('response expected'))
5e46123e6c35 error: add structured exception for EOF at prompt
Siddharth Agarwal <sid0@fb.com>
parents: 26693
diff changeset
    94
29509
945b4c14c570 error: make HintException a mix-in class not derived from BaseException (API)
Yuya Nishihara <yuya@tcha.org>
parents: 28141
diff changeset
    95
class OutOfBandError(Hint, Exception):
22359
e3714b927af5 error: use docstrings, not bare strings, for error classes
Mike Edgar <adgar@google.com>
parents: 21747
diff changeset
    96
    """Exception raised when a remote repo reports failure"""
15017
f4522df38c65 wireproto: add out-of-band error class to allow remote repo to report errors
Andrew Pritchard <andrewp@fogcreek.com>
parents: 14761
diff changeset
    97
29509
945b4c14c570 error: make HintException a mix-in class not derived from BaseException (API)
Yuya Nishihara <yuya@tcha.org>
parents: 28141
diff changeset
    98
class ParseError(Hint, Exception):
24040
7f375d2de945 error: update docstring on ParseError
Augie Fackler <augie@google.com>
parents: 24038
diff changeset
    99
    """Raised when parsing config files and {rev,file}sets (msg[, pos])"""
11288
2123aad24d56 error: add new ParseError for various parsing errors
Matt Mackall <mpm@selenic.com>
parents: 11287
diff changeset
   100
24217
d2b81256db1e error: add a new UnknownIdentifier error type
Augie Fackler <augie@google.com>
parents: 24190
diff changeset
   101
class UnknownIdentifier(ParseError):
d2b81256db1e error: add a new UnknownIdentifier error type
Augie Fackler <augie@google.com>
parents: 24190
diff changeset
   102
    """Exception raised when a {rev,file}set references an unknown identifier"""
d2b81256db1e error: add a new UnknownIdentifier error type
Augie Fackler <augie@google.com>
parents: 24190
diff changeset
   103
d2b81256db1e error: add a new UnknownIdentifier error type
Augie Fackler <augie@google.com>
parents: 24190
diff changeset
   104
    def __init__(self, function, symbols):
25945
147bd9e238a1 error: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25484
diff changeset
   105
        from .i18n import _
24217
d2b81256db1e error: add a new UnknownIdentifier error type
Augie Fackler <augie@google.com>
parents: 24190
diff changeset
   106
        ParseError.__init__(self, _("unknown identifier: %s") % function)
d2b81256db1e error: add a new UnknownIdentifier error type
Augie Fackler <augie@google.com>
parents: 24190
diff changeset
   107
        self.function = function
d2b81256db1e error: add a new UnknownIdentifier error type
Augie Fackler <augie@google.com>
parents: 24190
diff changeset
   108
        self.symbols = symbols
d2b81256db1e error: add a new UnknownIdentifier error type
Augie Fackler <augie@google.com>
parents: 24190
diff changeset
   109
29509
945b4c14c570 error: make HintException a mix-in class not derived from BaseException (API)
Yuya Nishihara <yuya@tcha.org>
parents: 28141
diff changeset
   110
class RepoError(Hint, Exception):
25248
821e664924dc error: refactor common hint-pattern into a common base class
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 25242
diff changeset
   111
    pass
7637
1d54e2f6c0b7 error: move repo errors
Matt Mackall <mpm@selenic.com>
parents: 7636
diff changeset
   112
9423
1444a42f6052 Make distinct lookup error for localrepo.lookup
Matt Mackall <mpm@selenic.com>
parents: 8227
diff changeset
   113
class RepoLookupError(RepoError):
1444a42f6052 Make distinct lookup error for localrepo.lookup
Matt Mackall <mpm@selenic.com>
parents: 8227
diff changeset
   114
    pass
1444a42f6052 Make distinct lookup error for localrepo.lookup
Matt Mackall <mpm@selenic.com>
parents: 8227
diff changeset
   115
23016
2bd51e61c65e repoview: add a FilteredRepoLookupError
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23015
diff changeset
   116
class FilteredRepoLookupError(RepoLookupError):
2bd51e61c65e repoview: add a FilteredRepoLookupError
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23015
diff changeset
   117
    pass
2bd51e61c65e repoview: add a FilteredRepoLookupError
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 23015
diff changeset
   118
7637
1d54e2f6c0b7 error: move repo errors
Matt Mackall <mpm@selenic.com>
parents: 7636
diff changeset
   119
class CapabilityError(RepoError):
1d54e2f6c0b7 error: move repo errors
Matt Mackall <mpm@selenic.com>
parents: 7636
diff changeset
   120
    pass
7640
7197812e8d44 error: move lock errors
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
   121
13447
931a72e00efa introduce new RequirementError (issue2649)
Adrian Buehlmann <adrian@cadifra.com>
parents: 11574
diff changeset
   122
class RequirementError(RepoError):
931a72e00efa introduce new RequirementError (issue2649)
Adrian Buehlmann <adrian@cadifra.com>
parents: 11574
diff changeset
   123
    """Exception raised if .hg/requires has an unknown entry."""
931a72e00efa introduce new RequirementError (issue2649)
Adrian Buehlmann <adrian@cadifra.com>
parents: 11574
diff changeset
   124
26985
039a53c87370 error: add a structured exception for unsupported merge records
Siddharth Agarwal <sid0@fb.com>
parents: 26896
diff changeset
   125
class UnsupportedMergeRecords(Abort):
039a53c87370 error: add a structured exception for unsupported merge records
Siddharth Agarwal <sid0@fb.com>
parents: 26896
diff changeset
   126
    def __init__(self, recordtypes):
039a53c87370 error: add a structured exception for unsupported merge records
Siddharth Agarwal <sid0@fb.com>
parents: 26896
diff changeset
   127
        from .i18n import _
039a53c87370 error: add a structured exception for unsupported merge records
Siddharth Agarwal <sid0@fb.com>
parents: 26896
diff changeset
   128
        self.recordtypes = sorted(recordtypes)
039a53c87370 error: add a structured exception for unsupported merge records
Siddharth Agarwal <sid0@fb.com>
parents: 26896
diff changeset
   129
        s = ' '.join(self.recordtypes)
039a53c87370 error: add a structured exception for unsupported merge records
Siddharth Agarwal <sid0@fb.com>
parents: 26896
diff changeset
   130
        Abort.__init__(
039a53c87370 error: add a structured exception for unsupported merge records
Siddharth Agarwal <sid0@fb.com>
parents: 26896
diff changeset
   131
            self, _('unsupported merge state records: %s') % s,
039a53c87370 error: add a structured exception for unsupported merge records
Siddharth Agarwal <sid0@fb.com>
parents: 26896
diff changeset
   132
            hint=_('see https://mercurial-scm.org/wiki/MergeStateRecords for '
039a53c87370 error: add a structured exception for unsupported merge records
Siddharth Agarwal <sid0@fb.com>
parents: 26896
diff changeset
   133
                   'more information'))
039a53c87370 error: add a structured exception for unsupported merge records
Siddharth Agarwal <sid0@fb.com>
parents: 26896
diff changeset
   134
7640
7197812e8d44 error: move lock errors
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
   135
class LockError(IOError):
7197812e8d44 error: move lock errors
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
   136
    def __init__(self, errno, strerror, filename, desc):
7197812e8d44 error: move lock errors
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
   137
        IOError.__init__(self, errno, strerror, filename)
7197812e8d44 error: move lock errors
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
   138
        self.desc = desc
7197812e8d44 error: move lock errors
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
   139
7197812e8d44 error: move lock errors
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
   140
class LockHeld(LockError):
7197812e8d44 error: move lock errors
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
   141
    def __init__(self, errno, filename, desc, locker):
7197812e8d44 error: move lock errors
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
   142
        LockError.__init__(self, errno, 'Lock held', filename, desc)
7197812e8d44 error: move lock errors
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
   143
        self.locker = locker
7197812e8d44 error: move lock errors
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
   144
7197812e8d44 error: move lock errors
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
   145
class LockUnavailable(LockError):
7197812e8d44 error: move lock errors
Matt Mackall <mpm@selenic.com>
parents: 7637
diff changeset
   146
    pass
7641
d2f753830f80 error: move UnexpectedOutput (now ResponseError)
Matt Mackall <mpm@selenic.com>
parents: 7640
diff changeset
   147
26355
f51713b8c6fa error: add an exception to indicate lock inheritance API contract violations
Siddharth Agarwal <sid0@fb.com>
parents: 25945
diff changeset
   148
# LockError is for errors while acquiring the lock -- this is unrelated
26438
024644b1900b error: make lock inheritance contract violations a subclass of RuntimeError
Siddharth Agarwal <sid0@fb.com>
parents: 26394
diff changeset
   149
class LockInheritanceContractViolation(RuntimeError):
26355
f51713b8c6fa error: add an exception to indicate lock inheritance API contract violations
Siddharth Agarwal <sid0@fb.com>
parents: 25945
diff changeset
   150
    pass
f51713b8c6fa error: add an exception to indicate lock inheritance API contract violations
Siddharth Agarwal <sid0@fb.com>
parents: 25945
diff changeset
   151
7641
d2f753830f80 error: move UnexpectedOutput (now ResponseError)
Matt Mackall <mpm@selenic.com>
parents: 7640
diff changeset
   152
class ResponseError(Exception):
d2f753830f80 error: move UnexpectedOutput (now ResponseError)
Matt Mackall <mpm@selenic.com>
parents: 7640
diff changeset
   153
    """Raised to print an error with part of output and exit."""
d2f753830f80 error: move UnexpectedOutput (now ResponseError)
Matt Mackall <mpm@selenic.com>
parents: 7640
diff changeset
   154
7643
9a1ea6587557 error: move UnknownCommand and AmbiguousCommand
Matt Mackall <mpm@selenic.com>
parents: 7641
diff changeset
   155
class UnknownCommand(Exception):
9a1ea6587557 error: move UnknownCommand and AmbiguousCommand
Matt Mackall <mpm@selenic.com>
parents: 7641
diff changeset
   156
    """Exception raised if command is not in the command table."""
9a1ea6587557 error: move UnknownCommand and AmbiguousCommand
Matt Mackall <mpm@selenic.com>
parents: 7641
diff changeset
   157
9a1ea6587557 error: move UnknownCommand and AmbiguousCommand
Matt Mackall <mpm@selenic.com>
parents: 7641
diff changeset
   158
class AmbiguousCommand(Exception):
9a1ea6587557 error: move UnknownCommand and AmbiguousCommand
Matt Mackall <mpm@selenic.com>
parents: 7641
diff changeset
   159
    """Exception raised if command shortcut matches more than one command."""
9a1ea6587557 error: move UnknownCommand and AmbiguousCommand
Matt Mackall <mpm@selenic.com>
parents: 7641
diff changeset
   160
7644
182b7114d35a error: move SignalInterrupt
Matt Mackall <mpm@selenic.com>
parents: 7643
diff changeset
   161
# derived from KeyboardInterrupt to simplify some breakout code
182b7114d35a error: move SignalInterrupt
Matt Mackall <mpm@selenic.com>
parents: 7643
diff changeset
   162
class SignalInterrupt(KeyboardInterrupt):
182b7114d35a error: move SignalInterrupt
Matt Mackall <mpm@selenic.com>
parents: 7643
diff changeset
   163
    """Exception raised on SIGTERM and SIGHUP."""
7646
e62a456b8dc5 error: move SignatureError
Matt Mackall <mpm@selenic.com>
parents: 7644
diff changeset
   164
e62a456b8dc5 error: move SignatureError
Matt Mackall <mpm@selenic.com>
parents: 7644
diff changeset
   165
class SignatureError(Exception):
e62a456b8dc5 error: move SignatureError
Matt Mackall <mpm@selenic.com>
parents: 7644
diff changeset
   166
    pass
21184
28d76afa1568 bundle2: fix raising errors during heads checking
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 18931
diff changeset
   167
28d76afa1568 bundle2: fix raising errors during heads checking
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 18931
diff changeset
   168
class PushRaced(RuntimeError):
28d76afa1568 bundle2: fix raising errors during heads checking
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 18931
diff changeset
   169
    """An exception raised during unbundling that indicate a push race"""
28d76afa1568 bundle2: fix raising errors during heads checking
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 18931
diff changeset
   170
30573
b0ebab239f90 error: add ProgrammingError
Jun Wu <quark@fb.com>
parents: 30332
diff changeset
   171
class ProgrammingError(RuntimeError):
b0ebab239f90 error: add ProgrammingError
Jun Wu <quark@fb.com>
parents: 30332
diff changeset
   172
    """Raised if a developer has made some mistake"""
b0ebab239f90 error: add ProgrammingError
Jun Wu <quark@fb.com>
parents: 30332
diff changeset
   173
21618
7568f5c1c801 bundle2: move exception classes into the error module
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 21184
diff changeset
   174
# bundle2 related errors
7568f5c1c801 bundle2: move exception classes into the error module
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 21184
diff changeset
   175
class BundleValueError(ValueError):
21621
b6eb56a9335d bundle2: introduce a ``params`` attribute to BundleValueError
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 21620
diff changeset
   176
    """error raised when bundle2 cannot be processed"""
21620
6eaa71b2a3cc bundle2: introduce a parttype attribute to BundleValueError
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 21618
diff changeset
   177
26393
cff70549a959 bundle2: rename error exception class for unsupported feature
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26355
diff changeset
   178
class BundleUnknownFeatureError(BundleValueError):
26394
e75da738add5 bundle2: allow to specify unsupported value on error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26393
diff changeset
   179
    def __init__(self, parttype=None, params=(), values=()):
21620
6eaa71b2a3cc bundle2: introduce a parttype attribute to BundleValueError
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 21618
diff changeset
   180
        self.parttype = parttype
21621
b6eb56a9335d bundle2: introduce a ``params`` attribute to BundleValueError
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 21620
diff changeset
   181
        self.params = params
26394
e75da738add5 bundle2: allow to specify unsupported value on error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26393
diff changeset
   182
        self.values = values
21627
3e8bcc90f07c bundle2: support None parttype in BundleValueError
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 21621
diff changeset
   183
        if self.parttype is None:
3e8bcc90f07c bundle2: support None parttype in BundleValueError
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 21621
diff changeset
   184
            msg = 'Stream Parameter'
3e8bcc90f07c bundle2: support None parttype in BundleValueError
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 21621
diff changeset
   185
        else:
3e8bcc90f07c bundle2: support None parttype in BundleValueError
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 21621
diff changeset
   186
            msg = parttype
26394
e75da738add5 bundle2: allow to specify unsupported value on error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26393
diff changeset
   187
        entries = self.params
e75da738add5 bundle2: allow to specify unsupported value on error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26393
diff changeset
   188
        if self.params and self.values:
e75da738add5 bundle2: allow to specify unsupported value on error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26393
diff changeset
   189
            assert len(self.params) == len(self.values)
e75da738add5 bundle2: allow to specify unsupported value on error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26393
diff changeset
   190
            entries = []
e75da738add5 bundle2: allow to specify unsupported value on error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26393
diff changeset
   191
            for idx, par in enumerate(self.params):
e75da738add5 bundle2: allow to specify unsupported value on error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26393
diff changeset
   192
                val = self.values[idx]
e75da738add5 bundle2: allow to specify unsupported value on error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26393
diff changeset
   193
                if val is None:
e75da738add5 bundle2: allow to specify unsupported value on error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26393
diff changeset
   194
                    entries.append(val)
e75da738add5 bundle2: allow to specify unsupported value on error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26393
diff changeset
   195
                else:
e75da738add5 bundle2: allow to specify unsupported value on error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26393
diff changeset
   196
                    entries.append("%s=%r" % (par, val))
e75da738add5 bundle2: allow to specify unsupported value on error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26393
diff changeset
   197
        if entries:
e75da738add5 bundle2: allow to specify unsupported value on error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26393
diff changeset
   198
            msg = '%s - %s' % (msg, ', '.join(entries))
21747
fecead61d222 error: restore python 2.4 compatibility for BundleValueError
Brendan Cully <brendan@kublai.com>
parents: 21627
diff changeset
   199
        ValueError.__init__(self, msg)
21618
7568f5c1c801 bundle2: move exception classes into the error module
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 21184
diff changeset
   200
7568f5c1c801 bundle2: move exception classes into the error module
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 21184
diff changeset
   201
class ReadOnlyPartError(RuntimeError):
7568f5c1c801 bundle2: move exception classes into the error module
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 21184
diff changeset
   202
    """error raised when code tries to alter a part being generated"""
7568f5c1c801 bundle2: move exception classes into the error module
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 21184
diff changeset
   203
25484
a5192774e925 bundle2: introduce a PushkeyFail error to abort unbundle on pushkey error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 25249
diff changeset
   204
class PushkeyFailed(Abort):
a5192774e925 bundle2: introduce a PushkeyFail error to abort unbundle on pushkey error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 25249
diff changeset
   205
    """error raised when a pushkey part failed to update a value"""
a5192774e925 bundle2: introduce a PushkeyFail error to abort unbundle on pushkey error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 25249
diff changeset
   206
a5192774e925 bundle2: introduce a PushkeyFail error to abort unbundle on pushkey error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 25249
diff changeset
   207
    def __init__(self, partid, namespace=None, key=None, new=None, old=None,
a5192774e925 bundle2: introduce a PushkeyFail error to abort unbundle on pushkey error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 25249
diff changeset
   208
                 ret=None):
a5192774e925 bundle2: introduce a PushkeyFail error to abort unbundle on pushkey error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 25249
diff changeset
   209
        self.partid = partid
a5192774e925 bundle2: introduce a PushkeyFail error to abort unbundle on pushkey error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 25249
diff changeset
   210
        self.namespace = namespace
a5192774e925 bundle2: introduce a PushkeyFail error to abort unbundle on pushkey error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 25249
diff changeset
   211
        self.key = key
a5192774e925 bundle2: introduce a PushkeyFail error to abort unbundle on pushkey error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 25249
diff changeset
   212
        self.new = new
a5192774e925 bundle2: introduce a PushkeyFail error to abort unbundle on pushkey error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 25249
diff changeset
   213
        self.old = old
a5192774e925 bundle2: introduce a PushkeyFail error to abort unbundle on pushkey error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 25249
diff changeset
   214
        self.ret = ret
a5192774e925 bundle2: introduce a PushkeyFail error to abort unbundle on pushkey error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 25249
diff changeset
   215
        # no i18n expected to be processed into a better message
a5192774e925 bundle2: introduce a PushkeyFail error to abort unbundle on pushkey error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 25249
diff changeset
   216
        Abort.__init__(self, 'failed to update value for "%s/%s"'
a5192774e925 bundle2: introduce a PushkeyFail error to abort unbundle on pushkey error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 25249
diff changeset
   217
                       % (namespace, key))
a5192774e925 bundle2: introduce a PushkeyFail error to abort unbundle on pushkey error
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 25249
diff changeset
   218
22595
244478687edd error: add CensoredNodeError, will be thrown when content deliberately erased
Mike Edgar <adgar@google.com>
parents: 22359
diff changeset
   219
class CensoredNodeError(RevlogError):
24190
903c7e8c97ad changegroup: emit full-replacement deltas if either revision is censored
Mike Edgar <adgar@google.com>
parents: 24137
diff changeset
   220
    """error raised when content verification fails on a censored node
22595
244478687edd error: add CensoredNodeError, will be thrown when content deliberately erased
Mike Edgar <adgar@google.com>
parents: 22359
diff changeset
   221
24190
903c7e8c97ad changegroup: emit full-replacement deltas if either revision is censored
Mike Edgar <adgar@google.com>
parents: 24137
diff changeset
   222
    Also contains the tombstone data substituted for the uncensored data.
903c7e8c97ad changegroup: emit full-replacement deltas if either revision is censored
Mike Edgar <adgar@google.com>
parents: 24137
diff changeset
   223
    """
903c7e8c97ad changegroup: emit full-replacement deltas if either revision is censored
Mike Edgar <adgar@google.com>
parents: 24137
diff changeset
   224
903c7e8c97ad changegroup: emit full-replacement deltas if either revision is censored
Mike Edgar <adgar@google.com>
parents: 24137
diff changeset
   225
    def __init__(self, filename, node, tombstone):
25945
147bd9e238a1 error: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25484
diff changeset
   226
        from .node import short
22595
244478687edd error: add CensoredNodeError, will be thrown when content deliberately erased
Mike Edgar <adgar@google.com>
parents: 22359
diff changeset
   227
        RevlogError.__init__(self, '%s:%s' % (filename, short(node)))
24190
903c7e8c97ad changegroup: emit full-replacement deltas if either revision is censored
Mike Edgar <adgar@google.com>
parents: 24137
diff changeset
   228
        self.tombstone = tombstone
24120
a450e0a2ba0a revlog: in addgroup, reject ill-formed deltas based on censored nodes
Mike Edgar <adgar@google.com>
parents: 24040
diff changeset
   229
a450e0a2ba0a revlog: in addgroup, reject ill-formed deltas based on censored nodes
Mike Edgar <adgar@google.com>
parents: 24040
diff changeset
   230
class CensoredBaseError(RevlogError):
a450e0a2ba0a revlog: in addgroup, reject ill-formed deltas based on censored nodes
Mike Edgar <adgar@google.com>
parents: 24040
diff changeset
   231
    """error raised when a delta is rejected because its base is censored
a450e0a2ba0a revlog: in addgroup, reject ill-formed deltas based on censored nodes
Mike Edgar <adgar@google.com>
parents: 24040
diff changeset
   232
a450e0a2ba0a revlog: in addgroup, reject ill-formed deltas based on censored nodes
Mike Edgar <adgar@google.com>
parents: 24040
diff changeset
   233
    A delta based on a censored revision must be formed as single patch
a450e0a2ba0a revlog: in addgroup, reject ill-formed deltas based on censored nodes
Mike Edgar <adgar@google.com>
parents: 24040
diff changeset
   234
    operation which replaces the entire base with new content. This ensures
a450e0a2ba0a revlog: in addgroup, reject ill-formed deltas based on censored nodes
Mike Edgar <adgar@google.com>
parents: 24040
diff changeset
   235
    the delta may be applied by clones which have not censored the base.
a450e0a2ba0a revlog: in addgroup, reject ill-formed deltas based on censored nodes
Mike Edgar <adgar@google.com>
parents: 24040
diff changeset
   236
    """
26640
b13fdcc4e700 exchange: refactor bundle specification parsing
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26438
diff changeset
   237
b13fdcc4e700 exchange: refactor bundle specification parsing
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26438
diff changeset
   238
class InvalidBundleSpecification(Exception):
b13fdcc4e700 exchange: refactor bundle specification parsing
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26438
diff changeset
   239
    """error raised when a bundle specification is invalid.
b13fdcc4e700 exchange: refactor bundle specification parsing
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26438
diff changeset
   240
b13fdcc4e700 exchange: refactor bundle specification parsing
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26438
diff changeset
   241
    This is used for syntax errors as opposed to support errors.
b13fdcc4e700 exchange: refactor bundle specification parsing
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26438
diff changeset
   242
    """
b13fdcc4e700 exchange: refactor bundle specification parsing
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26438
diff changeset
   243
b13fdcc4e700 exchange: refactor bundle specification parsing
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26438
diff changeset
   244
class UnsupportedBundleSpecification(Exception):
b13fdcc4e700 exchange: refactor bundle specification parsing
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26438
diff changeset
   245
    """error raised when a bundle specification is not supported."""
29536
b17a6e3cd2ac shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents: 29510
diff changeset
   246
b17a6e3cd2ac shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents: 29510
diff changeset
   247
class CorruptedState(Exception):
b17a6e3cd2ac shelve: make unshelve be able to abort in any case
Kostia Balytskyi <ikostia@fb.com>
parents: 29510
diff changeset
   248
    """error raised when a command is not able to read its state from file"""