~bzr-pqm/bzr/bzr.dev

1 by mbp at sourcefrog
import from baz patch-364
1
# -*- coding: UTF-8 -*-
2
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
17
18
__copyright__ = "Copyright (C) 2005 Canonical Ltd."
19
__author__ = "Martin Pool <mbp@canonical.com>"
20
21
22
######################################################################
23
# exceptions 
24
class BzrError(StandardError):
1193 by Martin Pool
- better string formatting of BzrErrors with explanation
25
    def __str__(self):
1393.1.64 by Martin Pool
- improved display of some errors, including NotBranchError
26
        # XXX: Should we show the exception class in 
27
        # exceptions that don't provide their own message?  
28
        # maybe it should be done at a higher level
29
        ## n = self.__class__.__name__ + ': '
30
        n = ''
1195 by Martin Pool
- better error display
31
        if len(self.args) == 1:
1393.1.64 by Martin Pool
- improved display of some errors, including NotBranchError
32
            return n + self.args[0]
1195 by Martin Pool
- better error display
33
        elif len(self.args) == 2:
1193 by Martin Pool
- better string formatting of BzrErrors with explanation
34
            # further explanation or suggestions
1405 by Robert Collins
remove some of the upgrade code that was duplicated with inventory_entry, and give all inventory entries a weave
35
            try:
1393.1.64 by Martin Pool
- improved display of some errors, including NotBranchError
36
                return n + '\n  '.join([self.args[0]] + self.args[1])
1405 by Robert Collins
remove some of the upgrade code that was duplicated with inventory_entry, and give all inventory entries a weave
37
            except TypeError:
1393.1.64 by Martin Pool
- improved display of some errors, including NotBranchError
38
                return n + "%r" % self
1193 by Martin Pool
- better string formatting of BzrErrors with explanation
39
        else:
1393.1.64 by Martin Pool
- improved display of some errors, including NotBranchError
40
            return n + `self.args`
1193 by Martin Pool
- better string formatting of BzrErrors with explanation
41
1185.1.14 by Robert Collins
remove more duplicate merged hunks. Bad MERGE3, BAD.
42
1 by mbp at sourcefrog
import from baz patch-364
43
class BzrCheckError(BzrError):
44
    pass
45
46
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
47
class InvalidRevisionNumber(BzrError):
48
    def __str__(self):
49
        return 'invalid revision number: %r' % self.args[0]
50
51
52
class InvalidRevisionId(BzrError):
53
    pass
54
55
329 by Martin Pool
- refactor command functions into command classes
56
class BzrCommandError(BzrError):
57
    # Error from malformed user command
1393.1.64 by Martin Pool
- improved display of some errors, including NotBranchError
58
    def __str__(self):
59
        return self.args[0]
1 by mbp at sourcefrog
import from baz patch-364
60
61
573 by Martin Pool
- new exception NotBranchError
62
class NotBranchError(BzrError):
63
    """Specified path is not in a branch"""
1393.1.64 by Martin Pool
- improved display of some errors, including NotBranchError
64
    def __str__(self):
65
        return 'not a branch: %s' % self.args[0]
573 by Martin Pool
- new exception NotBranchError
66
67
753 by Martin Pool
- new exception NotVersionedError
68
class NotVersionedError(BzrError):
69
    """Specified object is not versioned."""
70
71
599 by Martin Pool
- better error reporting from smart_add
72
class BadFileKindError(BzrError):
73
    """Specified file is of a kind that cannot be added.
74
75
    (For example a symlink or device file.)"""
76
    pass
77
78
79
class ForbiddenFileError(BzrError):
80
    """Cannot operate on a file because it is a control file."""
81
    pass
82
83
614 by Martin Pool
- unify two defintions of LockError
84
class LockError(Exception):
85
    """All exceptions from the lock/unlock functions should be from
86
    this exception class.  They will be translated as necessary. The
87
    original exception is available as e.original_error
88
    """
89
    def __init__(self, e=None):
90
        self.original_error = e
91
        if e:
92
            Exception.__init__(self, e)
93
        else:
94
            Exception.__init__(self)
882 by Martin Pool
- Optionally raise EmptyCommit if there are no changes. Test for this.
95
96
1417.1.6 by Robert Collins
introduce transactions for grouping actions done to and with branches
97
class CommitNotPossible(LockError):
98
    """A commit was attempted but we do not have a write lock open."""
99
100
101
class AlreadyCommitted(LockError):
102
    """A rollback was requested, but is not able to be accomplished."""
103
104
885 by Martin Pool
- commit command refuses unless something is changed or --unchanged is given
105
class PointlessCommit(Exception):
882 by Martin Pool
- Optionally raise EmptyCommit if there are no changes. Test for this.
106
    """Commit failed because nothing was changed."""
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
107
108
109
class NoSuchRevision(BzrError):
110
    def __init__(self, branch, revision):
111
        self.branch = branch
112
        self.revision = revision
113
        msg = "Branch %s has no revision %s" % (branch, revision)
114
        BzrError.__init__(self, msg)
115
1034 by Martin Pool
- merge bzrlib.revision.is_ancestor from aaron
116
1192 by Martin Pool
- clean up code for retrieving stored inventories
117
class HistoryMissing(BzrError):
118
    def __init__(self, branch, object_type, object_id):
119
        self.branch = branch
120
        BzrError.__init__(self,
121
                          '%s is missing %s {%s}'
122
                          % (branch, object_type, object_id))
123
124
1185.2.1 by Lalo Martins
moving DivergedBranches from bzrlib.branch to bzrlib.errors, obeying:
125
class DivergedBranches(BzrError):
126
    def __init__(self, branch1, branch2):
1185.1.14 by Robert Collins
remove more duplicate merged hunks. Bad MERGE3, BAD.
127
        BzrError.__init__(self, "These branches have diverged.")
1185.2.1 by Lalo Martins
moving DivergedBranches from bzrlib.branch to bzrlib.errors, obeying:
128
        self.branch1 = branch1
129
        self.branch2 = branch2
130
1390 by Robert Collins
pair programming worx... merge integration and weave
131
1105 by Martin Pool
- expose 'find-merge-base' as a new expert command,
132
class UnrelatedBranches(BzrCommandError):
133
    def __init__(self):
134
        msg = "Branches have no common ancestor, and no base revision"\
135
            " specified."
136
        BzrCommandError.__init__(self, msg)
137
974.1.80 by Aaron Bentley
Improved merge error handling and testing
138
class NoCommonAncestor(BzrError):
139
    def __init__(self, revision_a, revision_b):
140
        msg = "Revisions have no common ancestor: %s %s." \
141
            % (revision_a, revision_b) 
142
        BzrError.__init__(self, msg)
143
144
class NoCommonRoot(BzrError):
145
    def __init__(self, revision_a, revision_b):
146
        msg = "Revisions are not derived from the same root: %s %s." \
147
            % (revision_a, revision_b) 
148
        BzrError.__init__(self, msg)
1105 by Martin Pool
- expose 'find-merge-base' as a new expert command,
149
974.2.7 by aaron.bentley at utoronto
Merged from bzr.24
150
class NotAncestor(BzrError):
151
    def __init__(self, rev_id, not_ancestor_id):
1185.1.14 by Robert Collins
remove more duplicate merged hunks. Bad MERGE3, BAD.
152
        msg = "Revision %s is not an ancestor of %s" % (not_ancestor_id, 
153
                                                        rev_id)
154
        BzrError.__init__(self, msg)
155
        self.rev_id = rev_id
156
        self.not_ancestor_id = not_ancestor_id
1185.1.12 by Robert Collins
merge in lsdiff/filterdiff friendliness
157
158
1092.3.4 by Robert Collins
update symlink branch to integration
159
class NotAncestor(BzrError):
160
    def __init__(self, rev_id, not_ancestor_id):
161
        self.rev_id = rev_id
162
        self.not_ancestor_id = not_ancestor_id
163
        msg = "Revision %s is not an ancestor of %s" % (not_ancestor_id, 
164
                                                        rev_id)
165
        BzrError.__init__(self, msg)
166
167
974.1.30 by aaron.bentley at utoronto
Changed copy_multi to permit failure and return a tuple, tested missing required revisions
168
class InstallFailed(BzrError):
169
    def __init__(self, revisions):
1185.1.14 by Robert Collins
remove more duplicate merged hunks. Bad MERGE3, BAD.
170
        msg = "Could not install revisions:\n%s" % " ,".join(revisions)
171
        BzrError.__init__(self, msg)
974.1.30 by aaron.bentley at utoronto
Changed copy_multi to permit failure and return a tuple, tested missing required revisions
172
        self.revisions = revisions
1154 by Martin Pool
- fix imports for moved errors
173
174
175
class AmbiguousBase(BzrError):
176
    def __init__(self, bases):
177
        msg = "The correct base is unclear, becase %s are all equally close" %\
178
            ", ".join(bases)
179
        BzrError.__init__(self, msg)
180
        self.bases = bases
181
974.1.80 by Aaron Bentley
Improved merge error handling and testing
182
class NoCommits(BzrError):
183
    def __init__(self, branch):
184
        msg = "Branch %s has no commits." % branch
185
        BzrError.__init__(self, msg)
1185.10.1 by Aaron Bentley
Added --basis option to bzr branch
186
187
class UnlistableStore(BzrError):
188
    def __init__(self, store):
189
        BzrError.__init__(self, "Store %s is not listable" % store)
190
191
class UnlistableBranch(BzrError):
192
    def __init__(self, br):
193
        BzrError.__init__(self, "Stores for branch %s are not listable" % br)
1392 by Robert Collins
reinstate testfetch test case
194
195
196
from bzrlib.weave import WeaveError
1393.2.1 by John Arbash Meinel
Merged in split-storage-2 branch. Need to cleanup a little bit more still.
197
1185.11.9 by John Arbash Meinel
Most tests pass, some problems with unavailable socket recv
198
class TransportError(BzrError):
199
    """All errors thrown by Transport implementations should derive
200
    from this class.
201
    """
202
    def __init__(self, msg=None, orig_error=None):
203
        if msg is None and orig_error is not None:
204
            msg = str(orig_error)
205
        BzrError.__init__(self, msg)
206
        self.msg = msg
207
        self.orig_error = orig_error
208
209
# A set of semi-meaningful errors which can be thrown
210
class TransportNotPossible(TransportError):
211
    """This is for transports where a specific function is explicitly not
212
    possible. Such as pushing files to an HTTP server.
213
    """
214
    pass
215
216
class NonRelativePath(TransportError):
217
    """An absolute path was supplied, that could not be decoded into
218
    a relative path.
219
    """
220
    pass
221
222
class NoSuchFile(TransportError, IOError):
223
    """A get() was issued for a file that doesn't exist."""
1405 by Robert Collins
remove some of the upgrade code that was duplicated with inventory_entry, and give all inventory entries a weave
224
1393.1.64 by Martin Pool
- improved display of some errors, including NotBranchError
225
    # XXX: Is multiple inheritance for exceptions really needed?
226
1405 by Robert Collins
remove some of the upgrade code that was duplicated with inventory_entry, and give all inventory entries a weave
227
    def __str__(self):
1393.1.64 by Martin Pool
- improved display of some errors, including NotBranchError
228
        return 'no such file: ' + self.msg
1405 by Robert Collins
remove some of the upgrade code that was duplicated with inventory_entry, and give all inventory entries a weave
229
1185.11.9 by John Arbash Meinel
Most tests pass, some problems with unavailable socket recv
230
    def __init__(self, msg=None, orig_error=None):
231
        import errno
232
        TransportError.__init__(self, msg=msg, orig_error=orig_error)
233
        IOError.__init__(self, errno.ENOENT, self.msg)
234
235
class FileExists(TransportError, OSError):
236
    """An operation was attempted, which would overwrite an entry,
237
    but overwritting is not supported.
238
239
    mkdir() can throw this, but put() just overwites existing files.
240
    """
1393.1.64 by Martin Pool
- improved display of some errors, including NotBranchError
241
    # XXX: Is multiple inheritance for exceptions really needed?
1185.11.9 by John Arbash Meinel
Most tests pass, some problems with unavailable socket recv
242
    def __init__(self, msg=None, orig_error=None):
243
        import errno
244
        TransportError.__init__(self, msg=msg, orig_error=orig_error)
245
        OSError.__init__(self, errno.EEXIST, self.msg)
246
247
class PermissionDenied(TransportError):
248
    """An operation cannot succeed because of a lack of permissions."""
249
    pass
250
251
class ConnectionReset(TransportError):
252
    """The connection has been closed."""
253
    pass
254
1185.14.10 by Aaron Bentley
Commit aborts with conflicts in the tree.
255
class ConflictsInTree(BzrError):
256
    def __init__(self):
257
        BzrError.__init__(self, "Working tree has conflicts.")