~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/errors.py

  • Committer: Martin Pool
  • Date: 2005-10-04 10:57:51 UTC
  • mto: (1185.13.3)
  • mto: This revision was merged to the branch mainline in revision 1403.
  • Revision ID: mbp@sourcefrog.net-20051004105750-af83ed8d74f996cd
- partial test for upgrade of branch with ghosts

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#! /usr/bin/env python
2
1
# -*- coding: UTF-8 -*-
3
2
 
4
3
# This program is free software; you can redistribute it and/or modify
23
22
######################################################################
24
23
# exceptions 
25
24
class BzrError(StandardError):
26
 
    pass
 
25
    def __str__(self):
 
26
        if len(self.args) == 1:
 
27
            return self.args[0]
 
28
        elif len(self.args) == 2:
 
29
            # further explanation or suggestions
 
30
            return '\n  '.join([self.args[0]] + self.args[1])
 
31
        else:
 
32
            return `self.args`
 
33
 
27
34
 
28
35
class BzrCheckError(BzrError):
29
36
    pass
30
37
 
31
38
 
 
39
class InvalidRevisionNumber(BzrError):
 
40
    def __str__(self):
 
41
        return 'invalid revision number: %r' % self.args[0]
 
42
 
 
43
 
 
44
class InvalidRevisionId(BzrError):
 
45
    pass
 
46
 
 
47
 
32
48
class BzrCommandError(BzrError):
33
49
    # Error from malformed user command
34
50
    pass
35
51
 
36
52
 
37
 
def bailout(msg, explanation=[]):
38
 
    ex = BzrError(msg, explanation)
39
 
    import trace
40
 
    trace._tracefile.write('* raising %s\n' % ex)
41
 
    raise ex
 
53
class NotBranchError(BzrError):
 
54
    """Specified path is not in a branch"""
 
55
    pass
 
56
 
 
57
 
 
58
class NotVersionedError(BzrError):
 
59
    """Specified object is not versioned."""
 
60
 
 
61
 
 
62
class BadFileKindError(BzrError):
 
63
    """Specified file is of a kind that cannot be added.
 
64
 
 
65
    (For example a symlink or device file.)"""
 
66
    pass
 
67
 
 
68
 
 
69
class ForbiddenFileError(BzrError):
 
70
    """Cannot operate on a file because it is a control file."""
 
71
    pass
 
72
 
 
73
 
 
74
class LockError(Exception):
 
75
    """All exceptions from the lock/unlock functions should be from
 
76
    this exception class.  They will be translated as necessary. The
 
77
    original exception is available as e.original_error
 
78
    """
 
79
    def __init__(self, e=None):
 
80
        self.original_error = e
 
81
        if e:
 
82
            Exception.__init__(self, e)
 
83
        else:
 
84
            Exception.__init__(self)
 
85
 
 
86
 
 
87
class PointlessCommit(Exception):
 
88
    """Commit failed because nothing was changed."""
 
89
 
 
90
 
 
91
class NoSuchRevision(BzrError):
 
92
    def __init__(self, branch, revision):
 
93
        self.branch = branch
 
94
        self.revision = revision
 
95
        msg = "Branch %s has no revision %s" % (branch, revision)
 
96
        BzrError.__init__(self, msg)
 
97
 
 
98
 
 
99
class HistoryMissing(BzrError):
 
100
    def __init__(self, branch, object_type, object_id):
 
101
        self.branch = branch
 
102
        BzrError.__init__(self,
 
103
                          '%s is missing %s {%s}'
 
104
                          % (branch, object_type, object_id))
 
105
 
 
106
 
 
107
class DivergedBranches(BzrError):
 
108
    def __init__(self, branch1, branch2):
 
109
        BzrError.__init__(self, "These branches have diverged.")
 
110
        self.branch1 = branch1
 
111
        self.branch2 = branch2
 
112
 
 
113
 
 
114
class UnrelatedBranches(BzrCommandError):
 
115
    def __init__(self):
 
116
        msg = "Branches have no common ancestor, and no base revision"\
 
117
            " specified."
 
118
        BzrCommandError.__init__(self, msg)
 
119
 
 
120
class NoCommonAncestor(BzrError):
 
121
    def __init__(self, revision_a, revision_b):
 
122
        msg = "Revisions have no common ancestor: %s %s." \
 
123
            % (revision_a, revision_b) 
 
124
        BzrError.__init__(self, msg)
 
125
 
 
126
class NoCommonRoot(BzrError):
 
127
    def __init__(self, revision_a, revision_b):
 
128
        msg = "Revisions are not derived from the same root: %s %s." \
 
129
            % (revision_a, revision_b) 
 
130
        BzrError.__init__(self, msg)
 
131
 
 
132
class NotAncestor(BzrError):
 
133
    def __init__(self, rev_id, not_ancestor_id):
 
134
        msg = "Revision %s is not an ancestor of %s" % (not_ancestor_id, 
 
135
                                                        rev_id)
 
136
        BzrError.__init__(self, msg)
 
137
        self.rev_id = rev_id
 
138
        self.not_ancestor_id = not_ancestor_id
 
139
 
 
140
 
 
141
class NotAncestor(BzrError):
 
142
    def __init__(self, rev_id, not_ancestor_id):
 
143
        self.rev_id = rev_id
 
144
        self.not_ancestor_id = not_ancestor_id
 
145
        msg = "Revision %s is not an ancestor of %s" % (not_ancestor_id, 
 
146
                                                        rev_id)
 
147
        BzrError.__init__(self, msg)
 
148
 
 
149
 
 
150
class InstallFailed(BzrError):
 
151
    def __init__(self, revisions):
 
152
        msg = "Could not install revisions:\n%s" % " ,".join(revisions)
 
153
        BzrError.__init__(self, msg)
 
154
        self.revisions = revisions
 
155
 
 
156
 
 
157
class AmbiguousBase(BzrError):
 
158
    def __init__(self, bases):
 
159
        msg = "The correct base is unclear, becase %s are all equally close" %\
 
160
            ", ".join(bases)
 
161
        BzrError.__init__(self, msg)
 
162
        self.bases = bases
 
163
 
 
164
class NoCommits(BzrError):
 
165
    def __init__(self, branch):
 
166
        msg = "Branch %s has no commits." % branch
 
167
        BzrError.__init__(self, msg)
 
168
 
 
169
class UnlistableStore(BzrError):
 
170
    def __init__(self, store):
 
171
        BzrError.__init__(self, "Store %s is not listable" % store)
 
172
 
 
173
class UnlistableBranch(BzrError):
 
174
    def __init__(self, br):
 
175
        BzrError.__init__(self, "Stores for branch %s are not listable" % br)
 
176
 
 
177
 
 
178
from bzrlib.weave import WeaveError
 
179
 
 
180
class TransportError(BzrError):
 
181
    """All errors thrown by Transport implementations should derive
 
182
    from this class.
 
183
    """
 
184
    def __init__(self, msg=None, orig_error=None):
 
185
        if msg is None and orig_error is not None:
 
186
            msg = str(orig_error)
 
187
        BzrError.__init__(self, msg)
 
188
        self.msg = msg
 
189
        self.orig_error = orig_error
 
190
 
 
191
# A set of semi-meaningful errors which can be thrown
 
192
class TransportNotPossible(TransportError):
 
193
    """This is for transports where a specific function is explicitly not
 
194
    possible. Such as pushing files to an HTTP server.
 
195
    """
 
196
    pass
 
197
 
 
198
class NonRelativePath(TransportError):
 
199
    """An absolute path was supplied, that could not be decoded into
 
200
    a relative path.
 
201
    """
 
202
    pass
 
203
 
 
204
class NoSuchFile(TransportError, IOError):
 
205
    """A get() was issued for a file that doesn't exist."""
 
206
    def __init__(self, msg=None, orig_error=None):
 
207
        import errno
 
208
        TransportError.__init__(self, msg=msg, orig_error=orig_error)
 
209
        IOError.__init__(self, errno.ENOENT, self.msg)
 
210
 
 
211
class FileExists(TransportError, OSError):
 
212
    """An operation was attempted, which would overwrite an entry,
 
213
    but overwritting is not supported.
 
214
 
 
215
    mkdir() can throw this, but put() just overwites existing files.
 
216
    """
 
217
    def __init__(self, msg=None, orig_error=None):
 
218
        import errno
 
219
        TransportError.__init__(self, msg=msg, orig_error=orig_error)
 
220
        OSError.__init__(self, errno.EEXIST, self.msg)
 
221
 
 
222
class PermissionDenied(TransportError):
 
223
    """An operation cannot succeed because of a lack of permissions."""
 
224
    pass
 
225
 
 
226
class ConnectionReset(TransportError):
 
227
    """The connection has been closed."""
 
228
    pass
42
229