~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
1185.1.53 by Robert Collins
raise a specific error on unsupported branches so that they can be distinguished from generic errors
68
class UnsupportedFormatError(BzrError):
69
    """Specified path is a bzr branch that we cannot read."""
70
    def __str__(self):
71
        return 'unsupported branch format: %s' % self.args[0]
72
73
753 by Martin Pool
- new exception NotVersionedError
74
class NotVersionedError(BzrError):
75
    """Specified object is not versioned."""
76
77
599 by Martin Pool
- better error reporting from smart_add
78
class BadFileKindError(BzrError):
79
    """Specified file is of a kind that cannot be added.
80
81
    (For example a symlink or device file.)"""
82
    pass
83
84
85
class ForbiddenFileError(BzrError):
86
    """Cannot operate on a file because it is a control file."""
87
    pass
88
89
614 by Martin Pool
- unify two defintions of LockError
90
class LockError(Exception):
91
    """All exceptions from the lock/unlock functions should be from
92
    this exception class.  They will be translated as necessary. The
93
    original exception is available as e.original_error
94
    """
95
    def __init__(self, e=None):
96
        self.original_error = e
97
        if e:
98
            Exception.__init__(self, e)
99
        else:
100
            Exception.__init__(self)
882 by Martin Pool
- Optionally raise EmptyCommit if there are no changes. Test for this.
101
102
1417.1.6 by Robert Collins
introduce transactions for grouping actions done to and with branches
103
class CommitNotPossible(LockError):
104
    """A commit was attempted but we do not have a write lock open."""
105
106
107
class AlreadyCommitted(LockError):
108
    """A rollback was requested, but is not able to be accomplished."""
109
110
1417.1.8 by Robert Collins
use transactions in the weave store interface, which enables caching for log
111
class ReadOnlyError(LockError):
112
    """A write attempt was made in a read only transaction."""
113
114
885 by Martin Pool
- commit command refuses unless something is changed or --unchanged is given
115
class PointlessCommit(Exception):
882 by Martin Pool
- Optionally raise EmptyCommit if there are no changes. Test for this.
116
    """Commit failed because nothing was changed."""
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
117
118
119
class NoSuchRevision(BzrError):
120
    def __init__(self, branch, revision):
121
        self.branch = branch
122
        self.revision = revision
123
        msg = "Branch %s has no revision %s" % (branch, revision)
124
        BzrError.__init__(self, msg)
125
1034 by Martin Pool
- merge bzrlib.revision.is_ancestor from aaron
126
1192 by Martin Pool
- clean up code for retrieving stored inventories
127
class HistoryMissing(BzrError):
128
    def __init__(self, branch, object_type, object_id):
129
        self.branch = branch
130
        BzrError.__init__(self,
131
                          '%s is missing %s {%s}'
132
                          % (branch, object_type, object_id))
133
134
1185.2.1 by Lalo Martins
moving DivergedBranches from bzrlib.branch to bzrlib.errors, obeying:
135
class DivergedBranches(BzrError):
136
    def __init__(self, branch1, branch2):
1185.1.14 by Robert Collins
remove more duplicate merged hunks. Bad MERGE3, BAD.
137
        BzrError.__init__(self, "These branches have diverged.")
1185.2.1 by Lalo Martins
moving DivergedBranches from bzrlib.branch to bzrlib.errors, obeying:
138
        self.branch1 = branch1
139
        self.branch2 = branch2
140
1390 by Robert Collins
pair programming worx... merge integration and weave
141
1105 by Martin Pool
- expose 'find-merge-base' as a new expert command,
142
class UnrelatedBranches(BzrCommandError):
143
    def __init__(self):
144
        msg = "Branches have no common ancestor, and no base revision"\
145
            " specified."
146
        BzrCommandError.__init__(self, msg)
147
974.1.80 by Aaron Bentley
Improved merge error handling and testing
148
class NoCommonAncestor(BzrError):
149
    def __init__(self, revision_a, revision_b):
150
        msg = "Revisions have no common ancestor: %s %s." \
151
            % (revision_a, revision_b) 
152
        BzrError.__init__(self, msg)
153
154
class NoCommonRoot(BzrError):
155
    def __init__(self, revision_a, revision_b):
156
        msg = "Revisions are not derived from the same root: %s %s." \
157
            % (revision_a, revision_b) 
158
        BzrError.__init__(self, msg)
1105 by Martin Pool
- expose 'find-merge-base' as a new expert command,
159
974.2.7 by aaron.bentley at utoronto
Merged from bzr.24
160
class NotAncestor(BzrError):
161
    def __init__(self, rev_id, not_ancestor_id):
1185.1.14 by Robert Collins
remove more duplicate merged hunks. Bad MERGE3, BAD.
162
        msg = "Revision %s is not an ancestor of %s" % (not_ancestor_id, 
163
                                                        rev_id)
164
        BzrError.__init__(self, msg)
165
        self.rev_id = rev_id
166
        self.not_ancestor_id = not_ancestor_id
1185.1.12 by Robert Collins
merge in lsdiff/filterdiff friendliness
167
168
1092.3.4 by Robert Collins
update symlink branch to integration
169
class NotAncestor(BzrError):
170
    def __init__(self, rev_id, not_ancestor_id):
171
        self.rev_id = rev_id
172
        self.not_ancestor_id = not_ancestor_id
173
        msg = "Revision %s is not an ancestor of %s" % (not_ancestor_id, 
174
                                                        rev_id)
175
        BzrError.__init__(self, msg)
176
177
974.1.30 by aaron.bentley at utoronto
Changed copy_multi to permit failure and return a tuple, tested missing required revisions
178
class InstallFailed(BzrError):
179
    def __init__(self, revisions):
1185.1.14 by Robert Collins
remove more duplicate merged hunks. Bad MERGE3, BAD.
180
        msg = "Could not install revisions:\n%s" % " ,".join(revisions)
181
        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
182
        self.revisions = revisions
1154 by Martin Pool
- fix imports for moved errors
183
184
185
class AmbiguousBase(BzrError):
186
    def __init__(self, bases):
187
        msg = "The correct base is unclear, becase %s are all equally close" %\
188
            ", ".join(bases)
189
        BzrError.__init__(self, msg)
190
        self.bases = bases
191
974.1.80 by Aaron Bentley
Improved merge error handling and testing
192
class NoCommits(BzrError):
193
    def __init__(self, branch):
194
        msg = "Branch %s has no commits." % branch
195
        BzrError.__init__(self, msg)
1185.10.1 by Aaron Bentley
Added --basis option to bzr branch
196
197
class UnlistableStore(BzrError):
198
    def __init__(self, store):
199
        BzrError.__init__(self, "Store %s is not listable" % store)
200
201
class UnlistableBranch(BzrError):
202
    def __init__(self, br):
203
        BzrError.__init__(self, "Stores for branch %s are not listable" % br)
1392 by Robert Collins
reinstate testfetch test case
204
205
1185.13.4 by Robert Collins
make reweave visible as a weave method, and quickly integrate into fetch
206
from bzrlib.weave import WeaveError, WeaveParentMismatch
1393.2.1 by John Arbash Meinel
Merged in split-storage-2 branch. Need to cleanup a little bit more still.
207
1185.11.9 by John Arbash Meinel
Most tests pass, some problems with unavailable socket recv
208
class TransportError(BzrError):
209
    """All errors thrown by Transport implementations should derive
210
    from this class.
211
    """
212
    def __init__(self, msg=None, orig_error=None):
213
        if msg is None and orig_error is not None:
214
            msg = str(orig_error)
215
        BzrError.__init__(self, msg)
216
        self.msg = msg
217
        self.orig_error = orig_error
218
219
# A set of semi-meaningful errors which can be thrown
220
class TransportNotPossible(TransportError):
221
    """This is for transports where a specific function is explicitly not
222
    possible. Such as pushing files to an HTTP server.
223
    """
224
    pass
225
226
class NonRelativePath(TransportError):
227
    """An absolute path was supplied, that could not be decoded into
228
    a relative path.
229
    """
230
    pass
231
232
class NoSuchFile(TransportError, IOError):
233
    """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
234
1393.1.64 by Martin Pool
- improved display of some errors, including NotBranchError
235
    # XXX: Is multiple inheritance for exceptions really needed?
236
1405 by Robert Collins
remove some of the upgrade code that was duplicated with inventory_entry, and give all inventory entries a weave
237
    def __str__(self):
1393.1.64 by Martin Pool
- improved display of some errors, including NotBranchError
238
        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
239
1185.11.9 by John Arbash Meinel
Most tests pass, some problems with unavailable socket recv
240
    def __init__(self, msg=None, orig_error=None):
241
        import errno
242
        TransportError.__init__(self, msg=msg, orig_error=orig_error)
243
        IOError.__init__(self, errno.ENOENT, self.msg)
244
245
class FileExists(TransportError, OSError):
246
    """An operation was attempted, which would overwrite an entry,
247
    but overwritting is not supported.
248
249
    mkdir() can throw this, but put() just overwites existing files.
250
    """
1393.1.64 by Martin Pool
- improved display of some errors, including NotBranchError
251
    # XXX: Is multiple inheritance for exceptions really needed?
1185.11.9 by John Arbash Meinel
Most tests pass, some problems with unavailable socket recv
252
    def __init__(self, msg=None, orig_error=None):
253
        import errno
254
        TransportError.__init__(self, msg=msg, orig_error=orig_error)
255
        OSError.__init__(self, errno.EEXIST, self.msg)
256
257
class PermissionDenied(TransportError):
258
    """An operation cannot succeed because of a lack of permissions."""
259
    pass
260
261
class ConnectionReset(TransportError):
262
    """The connection has been closed."""
263
    pass
264
1185.14.10 by Aaron Bentley
Commit aborts with conflicts in the tree.
265
class ConflictsInTree(BzrError):
266
    def __init__(self):
267
        BzrError.__init__(self, "Working tree has conflicts.")