/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
2052.3.1 by John Arbash Meinel
Add tests to cleanup the copyright of all source files
1
# Copyright (C) 2005, 2006 Canonical Ltd
1830.3.5 by John Arbash Meinel
make_entry refuses to create non-normalized entries.
2
#
1 by mbp at sourcefrog
import from baz patch-364
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.
1830.3.5 by John Arbash Meinel
make_entry refuses to create non-normalized entries.
7
#
1 by mbp at sourcefrog
import from baz patch-364
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.
1830.3.5 by John Arbash Meinel
make_entry refuses to create non-normalized entries.
12
#
1 by mbp at sourcefrog
import from baz patch-364
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
1185.16.61 by mbp at sourcefrog
- start introducing hct error classes
17
"""Exceptions for bzr, and reporting of them.
18
1740.5.6 by Martin Pool
Clean up many exception classes.
19
There are 3 different classes of error:
20
21
 * KeyboardInterrupt, and OSError with EPIPE - the program terminates 
22
   with an appropriate short message
23
24
 * User errors, indicating a problem caused by the user such as a bad URL.
25
   These are printed in a short form.
26
 
27
 * Internal unexpected errors, including most Python builtin errors
28
   and some raised from inside bzr.  These are printed with a full 
29
   traceback and an invitation to report the bug.
30
1185.16.61 by mbp at sourcefrog
- start introducing hct error classes
31
Exceptions are caught at a high level to report errors to the user, and
32
might also be caught inside the program.  Therefore it needs to be
33
possible to convert them to a meaningful string, and also for them to be
34
interrogated by the program.
35
36
Exceptions are defined such that the arguments given to the constructor
37
are stored in the object as properties of the same name.  When the
38
object is printed as a string, the doc string of the class is used as
39
a format string with the property dictionary available to it.
40
41
This means that exceptions can used like this:
42
43
>>> import sys
44
>>> try:
45
...   raise NotBranchError(path='/foo/bar')
46
... except:
2027.2.2 by Marien Zwart
Fixes for python 2.5.
47
...   print '%s.%s' % (sys.exc_type.__module__, sys.exc_type.__name__)
1185.16.61 by mbp at sourcefrog
- start introducing hct error classes
48
...   print sys.exc_value
1551.6.23 by Aaron Bentley
Added None to getattr for case where error doesn't has have path
49
...   path = getattr(sys.exc_value, 'path', None)
1185.50.38 by John Arbash Meinel
Changed exception traceback route to not use hasattr, which generates its own exception.
50
...   if path is not None:
51
...     print path
1185.16.61 by mbp at sourcefrog
- start introducing hct error classes
52
bzrlib.errors.NotBranchError
53
Not a branch: /foo/bar
54
/foo/bar
55
56
Therefore:
57
58
 * create a new exception class for any class of error that can be
1740.5.6 by Martin Pool
Clean up many exception classes.
59
   usefully distinguished.  If no callers are likely to want to catch
60
   one but not another, don't worry about them.
61
62
 * the __str__ method should generate something useful; BzrError provides
63
   a good default implementation
64
65
Exception strings should start with a capital letter and should not have a
66
final fullstop.
1185.16.61 by mbp at sourcefrog
- start introducing hct error classes
67
"""
68
1614.2.13 by Olaf Conradi
Re-added AmbiguousBase with a deprecated warning.
69
from warnings import warn
70
1185.82.128 by Aaron Bentley
Provide errors from bzrlib.patches in bzrlib.errors
71
from bzrlib.patches import (PatchSyntax, 
72
                            PatchConflict, 
73
                            MalformedPatchHeader,
74
                            MalformedHunkHeader,
75
                            MalformedLine,)
76
77
1185.16.61 by mbp at sourcefrog
- start introducing hct error classes
78
# based on Scott James Remnant's hct error classes
79
1185.16.62 by mbp at sourcefrog
- convert NotBranchError to new exception base
80
# TODO: is there any value in providing the .args field used by standard
81
# python exceptions?   A list of values with no names seems less useful 
82
# to me.
83
1185.16.63 by Martin Pool
- more error conversion
84
# TODO: Perhaps convert the exception to a string at the moment it's 
85
# constructed to make sure it will succeed.  But that says nothing about
86
# exceptions that are never raised.
87
88
# TODO: Convert all the other error classes here to BzrNewError, and eliminate
89
# the old one.
1185.16.62 by mbp at sourcefrog
- convert NotBranchError to new exception base
90
1662.1.12 by Martin Pool
Translate unknown sftp errors to PathError, no NoSuchFile
91
# TODO: The pattern (from hct) of using classes docstrings as message
92
# templates is cute but maybe not such a great idea - perhaps should have a
93
# separate static message_template.
94
1185.16.61 by mbp at sourcefrog
- start introducing hct error classes
95
1 by mbp at sourcefrog
import from baz patch-364
96
class BzrError(StandardError):
1740.5.6 by Martin Pool
Clean up many exception classes.
97
    
98
    is_user_error = True
1685.2.1 by Brian M. Carlson
Add a workaround for usage of the args attribute in exceptions.
99
1193 by Martin Pool
- better string formatting of BzrErrors with explanation
100
    def __str__(self):
1393.1.64 by Martin Pool
- improved display of some errors, including NotBranchError
101
        # XXX: Should we show the exception class in 
102
        # exceptions that don't provide their own message?  
103
        # maybe it should be done at a higher level
104
        ## n = self.__class__.__name__ + ': '
105
        n = ''
1195 by Martin Pool
- better error display
106
        if len(self.args) == 1:
1449 by Robert Collins
teach check about ghosts
107
            return str(self.args[0])
1195 by Martin Pool
- better error display
108
        elif len(self.args) == 2:
1193 by Martin Pool
- better string formatting of BzrErrors with explanation
109
            # 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
110
            try:
1393.1.64 by Martin Pool
- improved display of some errors, including NotBranchError
111
                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
112
            except TypeError:
1393.1.64 by Martin Pool
- improved display of some errors, including NotBranchError
113
                return n + "%r" % self
1193 by Martin Pool
- better string formatting of BzrErrors with explanation
114
        else:
1393.1.64 by Martin Pool
- improved display of some errors, including NotBranchError
115
            return n + `self.args`
1193 by Martin Pool
- better string formatting of BzrErrors with explanation
116
1185.1.14 by Robert Collins
remove more duplicate merged hunks. Bad MERGE3, BAD.
117
1185.16.62 by mbp at sourcefrog
- convert NotBranchError to new exception base
118
class BzrNewError(BzrError):
1185.16.61 by mbp at sourcefrog
- start introducing hct error classes
119
    """bzr error"""
120
    # base classes should override the docstring with their human-
121
    # readable explanation
122
1685.2.1 by Brian M. Carlson
Add a workaround for usage of the args attribute in exceptions.
123
    def __init__(self, *args, **kwds):
124
        # XXX: Use the underlying BzrError to always generate the args attribute
1685.2.2 by Brian M. Carlson
Change the BzrNewError super invocation to a direct call, so it works with 2.4.
125
        # if it doesn't exist.  We can't use super here, because exceptions are
126
        # old-style classes in python2.4 (but new in 2.5).  --bmc, 20060426
127
        BzrError.__init__(self, *args)
1185.16.61 by mbp at sourcefrog
- start introducing hct error classes
128
        for key, value in kwds.items():
129
            setattr(self, key, value)
130
131
    def __str__(self):
132
        try:
1948.1.6 by John Arbash Meinel
Make BzrNewError always return a str object
133
            # __str__() should always return a 'str' object
134
            # never a 'unicode' object.
135
            s = self.__doc__ % self.__dict__
136
            if isinstance(s, unicode):
137
                return s.encode('utf8')
138
            return s
1910.12.1 by Andrew Bennetts
Catch TypeError in BzrNewError.__str__, and print more information if an exception happens in that.
139
        except (TypeError, NameError, ValueError, KeyError), e:
140
            return 'Unprintable exception %s(%r): %s' \
141
                % (self.__class__.__name__,
142
                   self.__dict__, str(e))
1185.16.61 by mbp at sourcefrog
- start introducing hct error classes
143
144
1986.1.2 by Robert Collins
Various changes to allow non-workingtree specific tests to run entirely
145
class AlreadyBuilding(BzrNewError):
146
    """The tree builder is already building a tree."""
147
148
1185.16.63 by Martin Pool
- more error conversion
149
class BzrCheckError(BzrNewError):
150
    """Internal check failed: %(message)s"""
1508.1.22 by Robert Collins
implement out of date working tree checks in commit.
151
1740.5.6 by Martin Pool
Clean up many exception classes.
152
    is_user_error = False
153
1185.16.63 by Martin Pool
- more error conversion
154
    def __init__(self, message):
1185.16.103 by mbp at sourcefrog
Fix up all calls to InvalidRevisionId() to specify parameters.
155
        BzrNewError.__init__(self)
1185.16.63 by Martin Pool
- more error conversion
156
        self.message = message
157
158
2018.5.24 by Andrew Bennetts
Setting NO_SMART_VFS in environment will disable VFS methods in the smart server. (Robert Collins, John Arbash Meinel, Andrew Bennetts)
159
class DisabledMethod(BzrNewError):
160
    """The smart server method %(class_name)s is disabled."""
161
162
    is_user_error = False
163
164
    def __init__(self, class_name):
165
        BzrNewError.__init__(self)
166
        self.class_name = class_name
167
168
1185.16.63 by Martin Pool
- more error conversion
169
class InvalidEntryName(BzrNewError):
170
    """Invalid entry name: %(name)s"""
1740.5.6 by Martin Pool
Clean up many exception classes.
171
172
    is_user_error = False
173
1185.16.63 by Martin Pool
- more error conversion
174
    def __init__(self, name):
1185.16.103 by mbp at sourcefrog
Fix up all calls to InvalidRevisionId() to specify parameters.
175
        BzrNewError.__init__(self)
1185.16.63 by Martin Pool
- more error conversion
176
        self.name = name
177
178
179
class InvalidRevisionNumber(BzrNewError):
180
    """Invalid revision number %(revno)d"""
181
    def __init__(self, revno):
1185.16.103 by mbp at sourcefrog
Fix up all calls to InvalidRevisionId() to specify parameters.
182
        BzrNewError.__init__(self)
1185.16.63 by Martin Pool
- more error conversion
183
        self.revno = revno
184
185
186
class InvalidRevisionId(BzrNewError):
1185.16.103 by mbp at sourcefrog
Fix up all calls to InvalidRevisionId() to specify parameters.
187
    """Invalid revision-id {%(revision_id)s} in %(branch)s"""
1908.5.9 by Robert Collins
Add a guard against setting the tree last-revision value to a ghost in the new tree parent management api.
188
1185.16.103 by mbp at sourcefrog
Fix up all calls to InvalidRevisionId() to specify parameters.
189
    def __init__(self, revision_id, branch):
1668.5.1 by Olaf Conradi
Fix bug in knits when raising InvalidRevisionId without the required
190
        # branch can be any string or object with __str__ defined
1185.16.103 by mbp at sourcefrog
Fix up all calls to InvalidRevisionId() to specify parameters.
191
        BzrNewError.__init__(self)
1185.12.90 by Aaron Bentley
Fixed InvalidRevisionID handling in Branch.get_revision_xml
192
        self.revision_id = revision_id
1185.16.103 by mbp at sourcefrog
Fix up all calls to InvalidRevisionId() to specify parameters.
193
        self.branch = branch
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
194
195
1986.5.3 by Robert Collins
New method ``WorkingTree.flush()`` which will write the current memory
196
class InventoryModified(BzrNewError):
197
    """The current inventory for the tree %(tree)r has been modified, so a clean inventory cannot be read without data loss."""
198
199
    def __init__(self, tree):
200
        BzrNewError.__init__(self)
201
        self.tree = tree
202
203
1988.2.1 by Robert Collins
WorkingTree has a new api ``unversion`` which allow the unversioning of
204
class NoSuchId(BzrNewError):
205
    """The file id %(file_id)s is not present in the tree %(tree)s."""
206
    
207
    def __init__(self, tree, file_id):
208
        BzrNewError.__init__(self)
209
        self.file_id = file_id
210
        self.tree = tree
211
212
1497 by Robert Collins
Move Branch.read_working_inventory to WorkingTree.
213
class NoWorkingTree(BzrNewError):
1662.1.6 by Martin Pool
Fix formatting of NoWorkingTree and NotLocalUrl exceptions
214
    """No WorkingTree exists for %(base)s."""
1497 by Robert Collins
Move Branch.read_working_inventory to WorkingTree.
215
    
216
    def __init__(self, base):
217
        BzrNewError.__init__(self)
218
        self.base = base
1506 by Robert Collins
Merge Johns current integration work.
219
220
1986.1.2 by Robert Collins
Various changes to allow non-workingtree specific tests to run entirely
221
class NotBuilding(BzrNewError):
222
    """Not currently building a tree."""
223
224
1534.4.42 by Robert Collins
add working tree to the BzrDir facilities.
225
class NotLocalUrl(BzrNewError):
1662.1.6 by Martin Pool
Fix formatting of NoWorkingTree and NotLocalUrl exceptions
226
    """%(url)s is not a local path."""
1534.4.42 by Robert Collins
add working tree to the BzrDir facilities.
227
    
228
    def __init__(self, url):
229
        BzrNewError.__init__(self)
230
        self.url = url
231
232
1986.5.3 by Robert Collins
New method ``WorkingTree.flush()`` which will write the current memory
233
class NotWriteLocked(BzrNewError):
234
    """%(not_locked)r is not write locked but needs to be."""
235
236
    def __init__(self, not_locked):
237
        BzrNewError.__init__(self)
238
        self.not_locked = not_locked
239
240
1740.5.6 by Martin Pool
Clean up many exception classes.
241
class BzrCommandError(BzrNewError):
242
    """Error from user command"""
1740.5.8 by Martin Pool
Review cleanups: better error reporting, put back report_exception.
243
1740.5.6 by Martin Pool
Clean up many exception classes.
244
    is_user_error = True
1740.5.8 by Martin Pool
Review cleanups: better error reporting, put back report_exception.
245
246
    # Error from malformed user command; please avoid raising this as a
247
    # generic exception not caused by user input.
1185.54.18 by Aaron Bentley
Noted difference of opinion wrt BzrCommandError
248
    #
249
    # I think it's a waste of effort to differentiate between errors that
250
    # are not intended to be caught anyway.  UI code need not subclass
251
    # BzrCommandError, and non-UI code should not throw a subclass of
252
    # BzrCommandError.  ADHB 20051211
1740.5.6 by Martin Pool
Clean up many exception classes.
253
    def __init__(self, msg):
1948.1.5 by John Arbash Meinel
Make sure BzrCommandError can handle unicode arguments
254
        # Object.__str__() must return a real string
255
        # returning a Unicode string is a python error.
256
        if isinstance(msg, unicode):
257
            self.msg = msg.encode('utf8')
258
        else:
259
            self.msg = msg
1740.5.6 by Martin Pool
Clean up many exception classes.
260
1393.1.64 by Martin Pool
- improved display of some errors, including NotBranchError
261
    def __str__(self):
1740.5.6 by Martin Pool
Clean up many exception classes.
262
        return self.msg
263
264
1740.5.8 by Martin Pool
Review cleanups: better error reporting, put back report_exception.
265
class BzrOptionError(BzrCommandError):
266
    """Error in command line options"""
267
268
    
1740.5.6 by Martin Pool
Clean up many exception classes.
269
class StrictCommitFailed(BzrNewError):
1740.5.8 by Martin Pool
Review cleanups: better error reporting, put back report_exception.
270
    """Commit refused because there are unknown files in the tree"""
1 by mbp at sourcefrog
import from baz patch-364
271
1185.31.41 by John Arbash Meinel
Creating a PathNotChild exception, and using relpath in HTTPTestUtil
272
1662.1.12 by Martin Pool
Translate unknown sftp errors to PathError, no NoSuchFile
273
# XXX: Should be unified with TransportError; they seem to represent the
274
# same thing
1185.31.44 by John Arbash Meinel
Cleaned up Exceptions for all transports.
275
class PathError(BzrNewError):
276
    """Generic path error: %(path)r%(extra)s)"""
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
277
1185.31.44 by John Arbash Meinel
Cleaned up Exceptions for all transports.
278
    def __init__(self, path, extra=None):
279
        BzrNewError.__init__(self)
280
        self.path = path
1908.4.11 by John Arbash Meinel
reverting changes to errors.py and local transport.
281
        if extra:
282
            self.extra = ': ' + str(extra)
283
        else:
284
            self.extra = ''
1185.31.44 by John Arbash Meinel
Cleaned up Exceptions for all transports.
285
286
287
class NoSuchFile(PathError):
1740.5.8 by Martin Pool
Review cleanups: better error reporting, put back report_exception.
288
    """No such file: %(path)r%(extra)s"""
1185.31.44 by John Arbash Meinel
Cleaned up Exceptions for all transports.
289
290
291
class FileExists(PathError):
1740.5.8 by Martin Pool
Review cleanups: better error reporting, put back report_exception.
292
    """File exists: %(path)r%(extra)s"""
1185.31.44 by John Arbash Meinel
Cleaned up Exceptions for all transports.
293
294
1553.5.10 by Martin Pool
New DirectoryNotEmpty exception, and raise this from local and memory
295
class DirectoryNotEmpty(PathError):
1740.5.8 by Martin Pool
Review cleanups: better error reporting, put back report_exception.
296
    """Directory not empty: %(path)r%(extra)s"""
1553.5.10 by Martin Pool
New DirectoryNotEmpty exception, and raise this from local and memory
297
298
2018.2.4 by Robert Collins
separate out the client medium from the client encoding protocol for the smart server.
299
class ReadingCompleted(BzrNewError):
300
    """The MediumRequest '%(request)s' has already had finish_reading called upon it - the request has been completed and no more data may be read."""
301
2018.2.28 by Andrew Bennetts
Changes in response to review: re-use _base_curl, rather than keeping a seperate _post_curl object; add docstring to test_http.RecordingServer, set is_user_error on some new exceptions.
302
    is_user_error = False
303
2018.2.4 by Robert Collins
separate out the client medium from the client encoding protocol for the smart server.
304
    def __init__(self, request):
305
        BzrNewError.__init__(self)
306
        self.request = request
307
308
1558.10.1 by Aaron Bentley
Handle lockdirs over NFS properly
309
class ResourceBusy(PathError):
1740.5.8 by Martin Pool
Review cleanups: better error reporting, put back report_exception.
310
    """Device or resource busy: %(path)r%(extra)s"""
1558.10.1 by Aaron Bentley
Handle lockdirs over NFS properly
311
312
1185.31.44 by John Arbash Meinel
Cleaned up Exceptions for all transports.
313
class PermissionDenied(PathError):
1740.5.8 by Martin Pool
Review cleanups: better error reporting, put back report_exception.
314
    """Permission denied: %(path)r%(extra)s"""
315
316
1185.85.76 by John Arbash Meinel
Adding an InvalidURL so transports can report they expect utf-8 quoted paths. Updated tests
317
class InvalidURL(PathError):
318
    """Invalid url supplied to transport: %(path)r%(extra)s"""
319
320
1685.1.55 by John Arbash Meinel
Adding bzrlib.urlutils.join() to handle joining URLs
321
class InvalidURLJoin(PathError):
322
    """Invalid URL join request: %(args)s%(extra)s"""
323
324
    def __init__(self, msg, base, args):
325
        PathError.__init__(self, base, msg)
2027.2.2 by Marien Zwart
Fixes for python 2.5.
326
        self.args = [base] + list(args)
1685.1.55 by John Arbash Meinel
Adding bzrlib.urlutils.join() to handle joining URLs
327
328
1843.1.1 by John Arbash Meinel
Update get_transport to raise a nicer error which includes dependency info
329
class UnsupportedProtocol(PathError):
330
    """Unsupported protocol for url "%(path)s"%(extra)s"""
331
332
    def __init__(self, url, extra):
333
        PathError.__init__(self, url, extra=extra)
334
335
2001.3.2 by John Arbash Meinel
Force all transports to raise ShortReadvError if they can
336
class ShortReadvError(PathError):
2001.3.3 by John Arbash Meinel
review feedback: add the actual count written to ShortReadvError
337
    """readv() read %(actual)s bytes rather than %(length)s bytes at %(offset)s for %(path)s%(extra)s"""
2001.3.2 by John Arbash Meinel
Force all transports to raise ShortReadvError if they can
338
339
    is_user_error = False
340
2001.3.3 by John Arbash Meinel
review feedback: add the actual count written to ShortReadvError
341
    def __init__(self, path, offset, length, actual, extra=None):
2001.3.2 by John Arbash Meinel
Force all transports to raise ShortReadvError if they can
342
        PathError.__init__(self, path, extra=extra)
343
        self.offset = offset
344
        self.length = length
2001.3.3 by John Arbash Meinel
review feedback: add the actual count written to ShortReadvError
345
        self.actual = actual
2001.3.2 by John Arbash Meinel
Force all transports to raise ShortReadvError if they can
346
347
1185.31.41 by John Arbash Meinel
Creating a PathNotChild exception, and using relpath in HTTPTestUtil
348
class PathNotChild(BzrNewError):
1740.5.8 by Martin Pool
Review cleanups: better error reporting, put back report_exception.
349
    """Path %(path)r is not a child of path %(base)r%(extra)s"""
1740.5.6 by Martin Pool
Clean up many exception classes.
350
351
    is_user_error = False
352
1185.31.44 by John Arbash Meinel
Cleaned up Exceptions for all transports.
353
    def __init__(self, path, base, extra=None):
1185.31.41 by John Arbash Meinel
Creating a PathNotChild exception, and using relpath in HTTPTestUtil
354
        BzrNewError.__init__(self)
355
        self.path = path
356
        self.base = base
1185.31.44 by John Arbash Meinel
Cleaned up Exceptions for all transports.
357
        if extra:
358
            self.extra = ': ' + str(extra)
359
        else:
360
            self.extra = ''
1185.31.41 by John Arbash Meinel
Creating a PathNotChild exception, and using relpath in HTTPTestUtil
361
362
1830.3.5 by John Arbash Meinel
make_entry refuses to create non-normalized entries.
363
class InvalidNormalization(PathError):
364
    """Path %(path)r is not unicode normalized"""
365
366
1685.1.60 by Martin Pool
[broken] NotBranchError should unescape the url if possible
367
# TODO: This is given a URL; we try to unescape it but doing that from inside
368
# the exception object is a bit undesirable.
369
# TODO: Probably this behavior of should be a common superclass 
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
370
class NotBranchError(PathError):
1685.1.80 by Wouter van Heyst
more code cleanup
371
    """Not a branch: %(path)s"""
1685.1.60 by Martin Pool
[broken] NotBranchError should unescape the url if possible
372
373
    def __init__(self, path):
374
       import bzrlib.urlutils as urlutils
1908.4.11 by John Arbash Meinel
reverting changes to errors.py and local transport.
375
       self.path = urlutils.unescape_for_display(path, 'ascii')
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
376
377
378
class AlreadyBranchError(PathError):
1662.1.19 by Martin Pool
Better error message when initting existing tree
379
    """Already a branch: %(path)s."""
380
381
382
class BranchExistsWithoutWorkingTree(PathError):
383
    """Directory contains a branch, but no working tree \
384
(use bzr checkout if you wish to build a working tree): %(path)s"""
1185.16.62 by mbp at sourcefrog
- convert NotBranchError to new exception base
385
573 by Martin Pool
- new exception NotBranchError
386
1755.3.6 by John Arbash Meinel
Add a test suite for Atomic File, and clean it up so that it really does set the mode properly.
387
class AtomicFileAlreadyClosed(PathError):
388
    """'%(function)s' called on an AtomicFile after it was closed: %(path)s"""
389
390
    def __init__(self, path, function):
391
        PathError.__init__(self, path=path, extra=None)
392
        self.function = function
393
394
1864.7.2 by John Arbash Meinel
Test that we copy the parent across properly (if it is available)
395
class InaccessibleParent(PathError):
396
    """Parent not accessible given base %(base)s and relative path %(path)s"""
397
398
    def __init__(self, path, base):
399
        PathError.__init__(self, path)
400
        self.base = base
401
402
1534.4.47 by Robert Collins
Split out repository into .bzr/repository
403
class NoRepositoryPresent(BzrNewError):
1740.5.8 by Martin Pool
Review cleanups: better error reporting, put back report_exception.
404
    """No repository present: %(path)r"""
1534.4.47 by Robert Collins
Split out repository into .bzr/repository
405
    def __init__(self, bzrdir):
406
        BzrNewError.__init__(self)
407
        self.path = bzrdir.transport.clone('..').base
408
409
1185.35.32 by Aaron Bentley
Fixed handling of files in mixed branches
410
class FileInWrongBranch(BzrNewError):
411
    """File %(path)s in not in branch %(branch_base)s."""
1534.4.44 by Robert Collins
Make a new BzrDir format that uses a versioned branch format in a branch/ subdirectory.
412
1185.35.32 by Aaron Bentley
Fixed handling of files in mixed branches
413
    def __init__(self, branch, path):
414
        BzrNewError.__init__(self)
415
        self.branch = branch
416
        self.branch_base = branch.base
417
        self.path = path
418
419
1740.5.6 by Martin Pool
Clean up many exception classes.
420
class UnsupportedFormatError(BzrNewError):
421
    """Unsupported branch format: %(format)s"""
422
423
424
class UnknownFormatError(BzrNewError):
1740.5.8 by Martin Pool
Review cleanups: better error reporting, put back report_exception.
425
    """Unknown branch format: %(format)r"""
1534.4.7 by Robert Collins
Move downlevel check up to the Branch.open logic, removing it from the Branch constructor and deprecating relax_version_check to the same.
426
427
1534.4.44 by Robert Collins
Make a new BzrDir format that uses a versioned branch format in a branch/ subdirectory.
428
class IncompatibleFormat(BzrNewError):
429
    """Format %(format)s is not compatible with .bzr version %(bzrdir)s."""
430
431
    def __init__(self, format, bzrdir_format):
432
        BzrNewError.__init__(self)
433
        self.format = format
434
        self.bzrdir = bzrdir_format
435
436
1910.2.60 by Aaron Bentley
Ensure that new-model revisions aren't installed into old-model repos
437
class IncompatibleRevision(BzrNewError):
438
    """Revision is not compatible with %(repo_format)s"""
439
440
    def __init__(self, repo_format):
441
        BzrNewError.__init__(self)
442
        self.repo_format = repo_format
443
444
1185.16.72 by Martin Pool
[merge] from robert and fix up tests
445
class NotVersionedError(BzrNewError):
446
    """%(path)s is not versioned"""
447
    def __init__(self, path):
448
        BzrNewError.__init__(self)
449
        self.path = path
753 by Martin Pool
- new exception NotVersionedError
450
451
1658.1.9 by Martin Pool
Give an error for bzr diff on an nonexistent file (Malone #3619)
452
class PathsNotVersionedError(BzrNewError):
453
    # used when reporting several paths are not versioned
454
    """Path(s) are not versioned: %(paths_as_string)s"""
455
456
    def __init__(self, paths):
457
        from bzrlib.osutils import quotefn
458
        BzrNewError.__init__(self)
459
        self.paths = paths
460
        self.paths_as_string = ' '.join([quotefn(p) for p in paths])
461
462
1662.1.9 by Martin Pool
Give a clear error for bzr status of an unversioned, nonexistent file. (Malone #3619)
463
class PathsDoNotExist(BzrNewError):
1662.1.14 by Martin Pool
(PathsDoNotExist) review style comments
464
    """Path(s) do not exist: %(paths_as_string)s"""
465
1662.1.9 by Martin Pool
Give a clear error for bzr status of an unversioned, nonexistent file. (Malone #3619)
466
    # used when reporting that paths are neither versioned nor in the working
467
    # tree
468
469
    def __init__(self, paths):
1662.1.14 by Martin Pool
(PathsDoNotExist) review style comments
470
        # circular import
1662.1.9 by Martin Pool
Give a clear error for bzr status of an unversioned, nonexistent file. (Malone #3619)
471
        from bzrlib.osutils import quotefn
472
        BzrNewError.__init__(self)
473
        self.paths = paths
474
        self.paths_as_string = ' '.join([quotefn(p) for p in paths])
475
476
1773.4.1 by Martin Pool
Add pyflakes makefile target; fix many warnings
477
class BadFileKindError(BzrNewError):
478
    """Cannot operate on %(filename)s of unsupported kind %(kind)s"""
479
480
1773.4.2 by Martin Pool
Cleanup of imports; undeprecate all_revision_ids()
481
class ForbiddenControlFileError(BzrNewError):
1773.4.1 by Martin Pool
Add pyflakes makefile target; fix many warnings
482
    """Cannot operate on %(filename)s because it is a control file"""
599 by Martin Pool
- better error reporting from smart_add
483
484
1553.5.11 by Martin Pool
Change some lock and transaction related exceptions to BzrNewException style
485
class LockError(BzrNewError):
486
    """Lock error: %(message)s"""
1185.16.63 by Martin Pool
- more error conversion
487
    # All exceptions from the lock/unlock functions should be from
488
    # this exception class.  They will be translated as necessary. The
489
    # original exception is available as e.original_error
1553.5.11 by Martin Pool
Change some lock and transaction related exceptions to BzrNewException style
490
    #
491
    # New code should prefer to raise specific subclasses
492
    def __init__(self, message):
493
        self.message = message
882 by Martin Pool
- Optionally raise EmptyCommit if there are no changes. Test for this.
494
495
1417.1.6 by Robert Collins
introduce transactions for grouping actions done to and with branches
496
class CommitNotPossible(LockError):
497
    """A commit was attempted but we do not have a write lock open."""
1553.5.11 by Martin Pool
Change some lock and transaction related exceptions to BzrNewException style
498
    def __init__(self):
499
        pass
1417.1.6 by Robert Collins
introduce transactions for grouping actions done to and with branches
500
501
502
class AlreadyCommitted(LockError):
503
    """A rollback was requested, but is not able to be accomplished."""
1553.5.11 by Martin Pool
Change some lock and transaction related exceptions to BzrNewException style
504
    def __init__(self):
505
        pass
1417.1.6 by Robert Collins
introduce transactions for grouping actions done to and with branches
506
507
1417.1.8 by Robert Collins
use transactions in the weave store interface, which enables caching for log
508
class ReadOnlyError(LockError):
1553.5.33 by Martin Pool
LockDir review comment fixes
509
    """A write attempt was made in a read only transaction on %(obj)s"""
510
    def __init__(self, obj):
511
        self.obj = obj
1553.5.11 by Martin Pool
Change some lock and transaction related exceptions to BzrNewException style
512
513
1594.2.21 by Robert Collins
Teach versioned files to prevent mutation after finishing.
514
class OutSideTransaction(BzrNewError):
515
    """A transaction related operation was attempted after the transaction finished."""
516
517
1553.5.36 by Martin Pool
Clean up duplicate BranchNotLocked error and rename to ObjectNotLocked
518
class ObjectNotLocked(LockError):
1740.5.8 by Martin Pool
Review cleanups: better error reporting, put back report_exception.
519
    """%(obj)r is not locked"""
520
1740.5.6 by Martin Pool
Clean up many exception classes.
521
    is_user_error = False
1740.5.8 by Martin Pool
Review cleanups: better error reporting, put back report_exception.
522
1553.5.36 by Martin Pool
Clean up duplicate BranchNotLocked error and rename to ObjectNotLocked
523
    # this can indicate that any particular object is not locked; see also
524
    # LockNotHeld which means that a particular *lock* object is not held by
525
    # the caller -- perhaps they should be unified.
526
    def __init__(self, obj):
527
        self.obj = obj
1553.5.11 by Martin Pool
Change some lock and transaction related exceptions to BzrNewException style
528
529
530
class ReadOnlyObjectDirtiedError(ReadOnlyError):
1740.5.8 by Martin Pool
Review cleanups: better error reporting, put back report_exception.
531
    """Cannot change object %(obj)r in read only transaction"""
1553.5.11 by Martin Pool
Change some lock and transaction related exceptions to BzrNewException style
532
    def __init__(self, obj):
533
        self.obj = obj
534
535
536
class UnlockableTransport(LockError):
537
    """Cannot lock: transport is read only: %(transport)s"""
538
    def __init__(self, transport):
539
        self.transport = transport
540
541
542
class LockContention(LockError):
543
    """Could not acquire lock %(lock)s"""
544
    # TODO: show full url for lock, combining the transport and relative bits?
545
    def __init__(self, lock):
546
        self.lock = lock
547
548
1553.5.23 by Martin Pool
Start LockDir.confirm method and LockBroken exception
549
class LockBroken(LockError):
1553.5.24 by Martin Pool
Warning to check storage when lock was broken
550
    """Lock was broken while still open: %(lock)s - check storage consistency!"""
1553.5.23 by Martin Pool
Start LockDir.confirm method and LockBroken exception
551
    def __init__(self, lock):
552
        self.lock = lock
553
554
1553.5.27 by Martin Pool
Confirm that only the intended holder of a lock was broken.
555
class LockBreakMismatch(LockError):
1740.5.8 by Martin Pool
Review cleanups: better error reporting, put back report_exception.
556
    """Lock was released and re-acquired before being broken: %(lock)s: held by %(holder)r, wanted to break %(target)r"""
1553.5.27 by Martin Pool
Confirm that only the intended holder of a lock was broken.
557
    def __init__(self, lock, holder, target):
558
        self.lock = lock
559
        self.holder = holder
560
        self.target = target
561
562
1553.5.11 by Martin Pool
Change some lock and transaction related exceptions to BzrNewException style
563
class LockNotHeld(LockError):
564
    """Lock not held: %(lock)s"""
565
    def __init__(self, lock):
566
        self.lock = lock
567
568
1185.16.63 by Martin Pool
- more error conversion
569
class PointlessCommit(BzrNewError):
1185.16.64 by Martin Pool
- more error conversions
570
    """No changes to commit"""
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
571
1551.3.1 by Aaron Bentley
PEP8 fixes
572
1534.4.13 by Robert Collins
Give a reasonable warning on attempts to upgrade a readonly url.
573
class UpgradeReadonly(BzrNewError):
574
    """Upgrade URL cannot work with readonly URL's."""
575
576
1534.5.7 by Robert Collins
Start factoring out the upgrade policy logic.
577
class UpToDateFormat(BzrNewError):
578
    """The branch format %(format)s is already at the most recent format."""
579
580
    def __init__(self, format):
581
        BzrNewError.__init__(self)
582
        self.format = format
583
584
1185.22.1 by Michael Ellerman
Implement strict commits with --strict flag.
585
class StrictCommitFailed(Exception):
586
    """Commit refused because there are unknowns in the tree."""
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
587
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
588
1740.5.6 by Martin Pool
Clean up many exception classes.
589
class NoSuchRevision(BzrNewError):
590
    """Branch %(branch)s has no revision %(revision)s"""
591
592
    is_user_error = False
593
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
594
    def __init__(self, branch, revision):
1948.4.1 by John Arbash Meinel
Update number parsers to raise InvalidRevisionSpec. Update revno: itself so it supports negative numbers
595
        BzrNewError.__init__(self, branch=branch, revision=revision)
596
597
1948.4.25 by John Arbash Meinel
Check that invalid specs are properly handled
598
class NoSuchRevisionSpec(BzrNewError):
599
    """No namespace registered for string: %(spec)r"""
600
601
    def __init__(self, spec):
602
        BzrNewError.__init__(self, spec=spec)
603
604
1948.4.24 by John Arbash Meinel
Change inheritence of InvalidRevisionSpec
605
class InvalidRevisionSpec(BzrNewError):
1948.4.15 by John Arbash Meinel
Change the InvalidRevisionSpec formatting to be more readable
606
    """Requested revision: '%(spec)s' does not exist in branch:
607
%(branch)s%(extra)s"""
1948.4.1 by John Arbash Meinel
Update number parsers to raise InvalidRevisionSpec. Update revno: itself so it supports negative numbers
608
609
    def __init__(self, spec, branch, extra=None):
1948.4.24 by John Arbash Meinel
Change inheritence of InvalidRevisionSpec
610
        BzrNewError.__init__(self, branch=branch, spec=spec)
1948.4.1 by John Arbash Meinel
Update number parsers to raise InvalidRevisionSpec. Update revno: itself so it supports negative numbers
611
        if extra:
1948.4.15 by John Arbash Meinel
Change the InvalidRevisionSpec formatting to be more readable
612
            self.extra = '\n' + str(extra)
1948.4.1 by John Arbash Meinel
Update number parsers to raise InvalidRevisionSpec. Update revno: itself so it supports negative numbers
613
        else:
614
            self.extra = ''
1740.5.6 by Martin Pool
Clean up many exception classes.
615
616
1192 by Martin Pool
- clean up code for retrieving stored inventories
617
class HistoryMissing(BzrError):
618
    def __init__(self, branch, object_type, object_id):
619
        self.branch = branch
620
        BzrError.__init__(self,
621
                          '%s is missing %s {%s}'
622
                          % (branch, object_type, object_id))
623
624
1740.5.6 by Martin Pool
Clean up many exception classes.
625
class DivergedBranches(BzrNewError):
626
    "These branches have diverged.  Use the merge command to reconcile them."""
627
628
    is_user_error = True
1649.1.1 by Robert Collins
* 'pull' and 'push' now normalise the revision history, so that any two
629
1185.2.1 by Lalo Martins
moving DivergedBranches from bzrlib.branch to bzrlib.errors, obeying:
630
    def __init__(self, branch1, branch2):
631
        self.branch1 = branch1
632
        self.branch2 = branch2
633
1390 by Robert Collins
pair programming worx... merge integration and weave
634
1740.5.6 by Martin Pool
Clean up many exception classes.
635
class UnrelatedBranches(BzrNewError):
636
    "Branches have no common ancestor, and no merge base revision was specified."
637
638
    is_user_error = True
639
640
641
class NoCommonAncestor(BzrNewError):
642
    "Revisions have no common ancestor: %(revision_a)s %(revision_b)s"
643
974.1.80 by Aaron Bentley
Improved merge error handling and testing
644
    def __init__(self, revision_a, revision_b):
1740.5.6 by Martin Pool
Clean up many exception classes.
645
        self.revision_a = revision_a
646
        self.revision_b = revision_b
974.1.80 by Aaron Bentley
Improved merge error handling and testing
647
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
648
974.1.80 by Aaron Bentley
Improved merge error handling and testing
649
class NoCommonRoot(BzrError):
650
    def __init__(self, revision_a, revision_b):
651
        msg = "Revisions are not derived from the same root: %s %s." \
652
            % (revision_a, revision_b) 
653
        BzrError.__init__(self, msg)
1105 by Martin Pool
- expose 'find-merge-base' as a new expert command,
654
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
655
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
656
974.2.7 by aaron.bentley at utoronto
Merged from bzr.24
657
class NotAncestor(BzrError):
658
    def __init__(self, rev_id, not_ancestor_id):
1185.1.14 by Robert Collins
remove more duplicate merged hunks. Bad MERGE3, BAD.
659
        msg = "Revision %s is not an ancestor of %s" % (not_ancestor_id, 
660
                                                        rev_id)
661
        BzrError.__init__(self, msg)
662
        self.rev_id = rev_id
663
        self.not_ancestor_id = not_ancestor_id
1185.1.12 by Robert Collins
merge in lsdiff/filterdiff friendliness
664
665
974.1.30 by aaron.bentley at utoronto
Changed copy_multi to permit failure and return a tuple, tested missing required revisions
666
class InstallFailed(BzrError):
667
    def __init__(self, revisions):
1185.1.14 by Robert Collins
remove more duplicate merged hunks. Bad MERGE3, BAD.
668
        msg = "Could not install revisions:\n%s" % " ,".join(revisions)
669
        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
670
        self.revisions = revisions
1154 by Martin Pool
- fix imports for moved errors
671
672
1614.2.13 by Olaf Conradi
Re-added AmbiguousBase with a deprecated warning.
673
class AmbiguousBase(BzrError):
674
    def __init__(self, bases):
675
        warn("BzrError AmbiguousBase has been deprecated as of bzrlib 0.8.",
676
                DeprecationWarning)
1759.2.1 by Jelmer Vernooij
Fix some types (found using aspell).
677
        msg = "The correct base is unclear, because %s are all equally close" %\
1614.2.13 by Olaf Conradi
Re-added AmbiguousBase with a deprecated warning.
678
            ", ".join(bases)
679
        BzrError.__init__(self, msg)
680
        self.bases = bases
681
682
1948.4.20 by John Arbash Meinel
Make NoCommits a BzrNewError
683
class NoCommits(BzrNewError):
684
    """Branch %(branch)s has no commits."""
685
974.1.80 by Aaron Bentley
Improved merge error handling and testing
686
    def __init__(self, branch):
1948.4.20 by John Arbash Meinel
Make NoCommits a BzrNewError
687
        BzrNewError.__init__(self, branch=branch)
1185.10.1 by Aaron Bentley
Added --basis option to bzr branch
688
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
689
1185.10.1 by Aaron Bentley
Added --basis option to bzr branch
690
class UnlistableStore(BzrError):
691
    def __init__(self, store):
692
        BzrError.__init__(self, "Store %s is not listable" % store)
693
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
694
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
695
1185.10.1 by Aaron Bentley
Added --basis option to bzr branch
696
class UnlistableBranch(BzrError):
697
    def __init__(self, br):
698
        BzrError.__init__(self, "Stores for branch %s are not listable" % br)
1392 by Robert Collins
reinstate testfetch test case
699
700
1505.1.24 by John Arbash Meinel
Updated commit to handle bound branches. Included test to handle commit after merge
701
class BoundBranchOutOfDate(BzrNewError):
702
    """Bound branch %(branch)s is out of date with master branch %(master)s."""
703
    def __init__(self, branch, master):
704
        BzrNewError.__init__(self)
705
        self.branch = branch
706
        self.master = master
707
708
        
709
class CommitToDoubleBoundBranch(BzrNewError):
710
    """Cannot commit to branch %(branch)s. It is bound to %(master)s, which is bound to %(remote)s."""
711
    def __init__(self, branch, master, remote):
712
        BzrNewError.__init__(self)
713
        self.branch = branch
714
        self.master = master
715
        self.remote = remote
716
1505.1.25 by John Arbash Meinel
Updated pull. Now all paths which call set_revision_history maintain the branch invariant. All tests pass.
717
718
class OverwriteBoundBranch(BzrNewError):
719
    """Cannot pull --overwrite to a branch which is bound %(branch)s"""
720
    def __init__(self, branch):
721
        BzrNewError.__init__(self)
722
        self.branch = branch
723
1505.1.29 by John Arbash Meinel
Added special exceptions when unable to contact parent branch. Added tests for failure. bind() no longer updates the remote working tree
724
725
class BoundBranchConnectionFailure(BzrNewError):
726
    """Unable to connect to target of bound branch %(branch)s => %(target)s: %(error)s"""
727
    def __init__(self, branch, target, error):
728
        BzrNewError.__init__(self)
729
        self.branch = branch
730
        self.target = target
731
        self.error = error
732
733
1185.16.116 by mbp at sourcefrog
Move weave errors into bzrlib.errors and make consistent with new system.
734
class WeaveError(BzrNewError):
735
    """Error in processing weave: %(message)s"""
1563.2.10 by Robert Collins
Change weave store to be a versioned store, using WeaveFiles which maintain integrity without needing explicit 'put' operations.
736
1185.16.116 by mbp at sourcefrog
Move weave errors into bzrlib.errors and make consistent with new system.
737
    def __init__(self, message=None):
738
        BzrNewError.__init__(self)
739
        self.message = message
740
741
742
class WeaveRevisionAlreadyPresent(WeaveError):
743
    """Revision {%(revision_id)s} already present in %(weave)s"""
744
    def __init__(self, revision_id, weave):
1563.2.10 by Robert Collins
Change weave store to be a versioned store, using WeaveFiles which maintain integrity without needing explicit 'put' operations.
745
1185.16.116 by mbp at sourcefrog
Move weave errors into bzrlib.errors and make consistent with new system.
746
        WeaveError.__init__(self)
747
        self.revision_id = revision_id
748
        self.weave = weave
749
750
751
class WeaveRevisionNotPresent(WeaveError):
752
    """Revision {%(revision_id)s} not present in %(weave)s"""
1563.2.10 by Robert Collins
Change weave store to be a versioned store, using WeaveFiles which maintain integrity without needing explicit 'put' operations.
753
1185.16.116 by mbp at sourcefrog
Move weave errors into bzrlib.errors and make consistent with new system.
754
    def __init__(self, revision_id, weave):
755
        WeaveError.__init__(self)
756
        self.revision_id = revision_id
757
        self.weave = weave
758
759
760
class WeaveFormatError(WeaveError):
761
    """Weave invariant violated: %(what)s"""
1563.2.10 by Robert Collins
Change weave store to be a versioned store, using WeaveFiles which maintain integrity without needing explicit 'put' operations.
762
1185.16.116 by mbp at sourcefrog
Move weave errors into bzrlib.errors and make consistent with new system.
763
    def __init__(self, what):
764
        WeaveError.__init__(self)
765
        self.what = what
766
767
768
class WeaveParentMismatch(WeaveError):
769
    """Parents are mismatched between two revisions."""
770
    
1393.2.1 by John Arbash Meinel
Merged in split-storage-2 branch. Need to cleanup a little bit more still.
771
1185.50.23 by John Arbash Meinel
Adding sha1 check when weave extracts a text.
772
class WeaveInvalidChecksum(WeaveError):
773
    """Text did not match it's checksum: %(message)s"""
774
775
1551.3.11 by Aaron Bentley
Merge from Robert
776
class WeaveTextDiffers(WeaveError):
777
    """Weaves differ on text content. Revision: {%(revision_id)s}, %(weave_a)s, %(weave_b)s"""
778
779
    def __init__(self, revision_id, weave_a, weave_b):
780
        WeaveError.__init__(self)
781
        self.revision_id = revision_id
782
        self.weave_a = weave_a
783
        self.weave_b = weave_b
784
785
1534.7.158 by Aaron Bentley
Merged John Meinel's integration
786
class WeaveTextDiffers(WeaveError):
787
    """Weaves differ on text content. Revision: {%(revision_id)s}, %(weave_a)s, %(weave_b)s"""
788
789
    def __init__(self, revision_id, weave_a, weave_b):
790
        WeaveError.__init__(self)
791
        self.revision_id = revision_id
792
        self.weave_a = weave_a
793
        self.weave_b = weave_b
794
795
1563.2.1 by Robert Collins
Merge in a variation of the versionedfile api from versioned-file.
796
class VersionedFileError(BzrNewError):
797
    """Versioned file error."""
798
799
800
class RevisionNotPresent(VersionedFileError):
801
    """Revision {%(revision_id)s} not present in %(file_id)s."""
802
803
    def __init__(self, revision_id, file_id):
804
        VersionedFileError.__init__(self)
805
        self.revision_id = revision_id
806
        self.file_id = file_id
807
808
809
class RevisionAlreadyPresent(VersionedFileError):
810
    """Revision {%(revision_id)s} already present in %(file_id)s."""
811
812
    def __init__(self, revision_id, file_id):
813
        VersionedFileError.__init__(self)
814
        self.revision_id = revision_id
815
        self.file_id = file_id
816
817
818
class KnitError(BzrNewError):
819
    """Knit error"""
820
821
822
class KnitHeaderError(KnitError):
823
    """Knit header error: %(badline)r unexpected"""
824
825
    def __init__(self, badline):
826
        KnitError.__init__(self)
827
        self.badline = badline
828
829
830
class KnitCorrupt(KnitError):
831
    """Knit %(filename)s corrupt: %(how)s"""
832
833
    def __init__(self, filename, how):
834
        KnitError.__init__(self)
835
        self.filename = filename
836
        self.how = how
837
838
1185.31.12 by John Arbash Meinel
Refactored the export code to make it easier to add new export formats.
839
class NoSuchExportFormat(BzrNewError):
840
    """Export format %(format)r not supported"""
2018.2.4 by Robert Collins
separate out the client medium from the client encoding protocol for the smart server.
841
1185.31.12 by John Arbash Meinel
Refactored the export code to make it easier to add new export formats.
842
    def __init__(self, format):
843
        BzrNewError.__init__(self)
844
        self.format = format
845
846
2018.2.4 by Robert Collins
separate out the client medium from the client encoding protocol for the smart server.
847
848
class TooManyConcurrentRequests(BzrNewError):
849
    """The medium '%(medium)s' has reached its concurrent request limit. Be sure to finish_writing and finish_reading on the current request that is open."""
850
851
    def __init__(self, medium):
852
        BzrNewError.__init__(self)
853
        self.medium = medium
854
855
1824.2.1 by Johan Rydberg
Let TransportError inherit BzrNerError.
856
class TransportError(BzrNewError):
857
    """Transport error: %(msg)s %(orig_error)s"""
858
1185.11.9 by John Arbash Meinel
Most tests pass, some problems with unavailable socket recv
859
    def __init__(self, msg=None, orig_error=None):
860
        if msg is None and orig_error is not None:
861
            msg = str(orig_error)
1824.2.1 by Johan Rydberg
Let TransportError inherit BzrNerError.
862
        if orig_error is None:
863
            orig_error = ''
864
        if msg is None:
865
            msg =  ''
1185.11.9 by John Arbash Meinel
Most tests pass, some problems with unavailable socket recv
866
        self.msg = msg
867
        self.orig_error = orig_error
1824.2.1 by Johan Rydberg
Let TransportError inherit BzrNerError.
868
        BzrNewError.__init__(self)
1185.11.9 by John Arbash Meinel
Most tests pass, some problems with unavailable socket recv
869
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
870
1910.19.14 by Robert Collins
Fix up all tests to pass, remove a couple more deprecated function calls, and break the dependency on sftp for the smart transport.
871
class SmartProtocolError(TransportError):
1910.19.13 by Andrew Bennetts
Address various review comments.
872
    """Generic bzr smart protocol error: %(details)s"""
873
874
    def __init__(self, details):
875
        self.details = details
876
877
1185.11.9 by John Arbash Meinel
Most tests pass, some problems with unavailable socket recv
878
# A set of semi-meaningful errors which can be thrown
879
class TransportNotPossible(TransportError):
2045.1.3 by John Arbash Meinel
Lukáš Lalinský: TransportNotPossible has a bad docstring
880
    """Transport operation not possible: %(msg)s %(orig_error)s"""
1185.11.9 by John Arbash Meinel
Most tests pass, some problems with unavailable socket recv
881
1185.31.44 by John Arbash Meinel
Cleaned up Exceptions for all transports.
882
883
class ConnectionError(TransportError):
1824.2.1 by Johan Rydberg
Let TransportError inherit BzrNerError.
884
    """Connection error: %(msg)s %(orig_error)s"""
1185.31.44 by John Arbash Meinel
Cleaned up Exceptions for all transports.
885
1185.11.9 by John Arbash Meinel
Most tests pass, some problems with unavailable socket recv
886
2052.4.4 by John Arbash Meinel
Create a SocketConnectionError to make creating nice errors easier
887
class SocketConnectionError(ConnectionError):
888
    """%(msg)s %(host)s%(port)s%(orig_error)s"""
889
890
    def __init__(self, host, port=None, msg=None, orig_error=None):
891
        if msg is None:
892
            msg = 'Failed to connect to'
893
        if orig_error is None:
894
            orig_error = ''
895
        else:
896
            orig_error = '; ' + str(orig_error)
897
        ConnectionError.__init__(self, msg=msg, orig_error=orig_error)
898
        self.host = host
899
        if port is None:
900
            self.port = ''
901
        else:
902
            self.port = ':%s' % port
903
904
1185.11.9 by John Arbash Meinel
Most tests pass, some problems with unavailable socket recv
905
class ConnectionReset(TransportError):
1824.2.1 by Johan Rydberg
Let TransportError inherit BzrNerError.
906
    """Connection closed: %(msg)s %(orig_error)s"""
1185.11.9 by John Arbash Meinel
Most tests pass, some problems with unavailable socket recv
907
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
908
1786.1.8 by John Arbash Meinel
[merge] Johan Rydberg test updates
909
class InvalidRange(TransportError):
1979.1.1 by John Arbash Meinel
Fix bug #57723, parse boundary="" correctly, since Squid uses it
910
    """Invalid range access in %(path)s at %(offset)s."""
1786.1.8 by John Arbash Meinel
[merge] Johan Rydberg test updates
911
    
912
    def __init__(self, path, offset):
913
        TransportError.__init__(self, ("Invalid range access in %s at %d"
914
                                       % (path, offset)))
1979.1.1 by John Arbash Meinel
Fix bug #57723, parse boundary="" correctly, since Squid uses it
915
        self.path = path
916
        self.offset = offset
1786.1.8 by John Arbash Meinel
[merge] Johan Rydberg test updates
917
918
1786.1.17 by John Arbash Meinel
Adding tests for _parse_boundary.
919
class InvalidHttpResponse(TransportError):
920
    """Invalid http response for %(path)s: %(msg)s"""
921
1786.1.31 by John Arbash Meinel
Update http errors to properly use BzrNewError
922
    def __init__(self, path, msg, orig_error=None):
1786.1.17 by John Arbash Meinel
Adding tests for _parse_boundary.
923
        self.path = path
1786.1.31 by John Arbash Meinel
Update http errors to properly use BzrNewError
924
        TransportError.__init__(self, msg, orig_error=orig_error)
1786.1.17 by John Arbash Meinel
Adding tests for _parse_boundary.
925
926
927
class InvalidHttpRange(InvalidHttpResponse):
1786.1.13 by John Arbash Meinel
Found a few bugs in error handling code, updated tests
928
    """Invalid http range "%(range)s" for %(path)s: %(msg)s"""
929
    
930
    def __init__(self, path, range, msg):
931
        self.range = range
1786.1.17 by John Arbash Meinel
Adding tests for _parse_boundary.
932
        InvalidHttpResponse.__init__(self, path, msg)
933
934
935
class InvalidHttpContentType(InvalidHttpResponse):
936
    """Invalid http Content-type "%(ctype)s" for %(path)s: %(msg)s"""
937
    
938
    def __init__(self, path, ctype, msg):
939
        self.ctype = ctype
940
        InvalidHttpResponse.__init__(self, path, msg)
1786.1.13 by John Arbash Meinel
Found a few bugs in error handling code, updated tests
941
942
1185.14.10 by Aaron Bentley
Commit aborts with conflicts in the tree.
943
class ConflictsInTree(BzrError):
944
    def __init__(self):
945
        BzrError.__init__(self, "Working tree has conflicts.")
1185.12.49 by Aaron Bentley
Switched to ConfigObj
946
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
947
1185.12.49 by Aaron Bentley
Switched to ConfigObj
948
class ParseConfigError(BzrError):
949
    def __init__(self, errors, filename):
950
        if filename is None:
951
            filename = ""
952
        message = "Error(s) parsing config file %s:\n%s" % \
953
            (filename, ('\n'.join(e.message for e in errors)))
954
        BzrError.__init__(self, message)
1185.12.52 by Aaron Bentley
Merged more config stuff from Robert
955
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
956
2055.2.2 by John Arbash Meinel
Switch extract_email_address() to use a more specific exception
957
class NoEmailInUsername(BzrNewError):
958
    """%(username)r does not seem to contain a reasonable email address"""
959
960
    def __init__(self, username):
961
        BzrNewError.__init__(self)
962
        self.username = username
963
964
1442.1.58 by Robert Collins
gpg signing of content
965
class SigningFailed(BzrError):
966
    def __init__(self, command_line):
967
        BzrError.__init__(self, "Failed to gpg sign data with command '%s'"
968
                               % command_line)
1185.12.83 by Aaron Bentley
Preliminary weave merge support
969
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
970
1185.12.83 by Aaron Bentley
Preliminary weave merge support
971
class WorkingTreeNotRevision(BzrError):
972
    def __init__(self, tree):
973
        BzrError.__init__(self, "The working tree for %s has changed since"
974
                          " last commit, but weave merge requires that it be"
975
                          " unchanged." % tree.basedir)
1185.12.104 by Aaron Bentley
Merged Martin's latest
976
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
977
2018.2.4 by Robert Collins
separate out the client medium from the client encoding protocol for the smart server.
978
class WritingCompleted(BzrNewError):
979
    """The MediumRequest '%(request)s' has already had finish_writing called upon it - accept bytes may not be called anymore."""
980
2018.2.28 by Andrew Bennetts
Changes in response to review: re-use _base_curl, rather than keeping a seperate _post_curl object; add docstring to test_http.RecordingServer, set is_user_error on some new exceptions.
981
    is_user_error = False
982
2018.2.4 by Robert Collins
separate out the client medium from the client encoding protocol for the smart server.
983
    def __init__(self, request):
984
        BzrNewError.__init__(self)
985
        self.request = request
986
987
988
class WritingNotComplete(BzrNewError):
989
    """The MediumRequest '%(request)s' has not has finish_writing called upon it - until the write phase is complete no data may be read."""
990
2018.2.28 by Andrew Bennetts
Changes in response to review: re-use _base_curl, rather than keeping a seperate _post_curl object; add docstring to test_http.RecordingServer, set is_user_error on some new exceptions.
991
    is_user_error = False
992
2018.2.4 by Robert Collins
separate out the client medium from the client encoding protocol for the smart server.
993
    def __init__(self, request):
994
        BzrNewError.__init__(self)
995
        self.request = request
996
997
1185.24.1 by Aaron Bentley
Got reprocessing working
998
class CantReprocessAndShowBase(BzrNewError):
999
    """Can't reprocess and show base.
1000
Reprocessing obscures relationship of conflicting lines to base."""
1185.24.2 by Aaron Bentley
Merge from mainline
1001
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
1002
1185.16.114 by mbp at sourcefrog
Improved topological sort
1003
class GraphCycleError(BzrNewError):
1004
    """Cycle in graph %(graph)r"""
1005
    def __init__(self, graph):
1006
        BzrNewError.__init__(self)
1007
        self.graph = graph
1185.35.1 by Aaron Bentley
Implemented conflicts.restore
1008
1505.1.23 by John Arbash Meinel
Whitespace cleanup of bzrlib.errors
1009
1185.35.1 by Aaron Bentley
Implemented conflicts.restore
1010
class NotConflicted(BzrNewError):
1185.35.4 by Aaron Bentley
Implemented remerge
1011
    """File %(filename)s is not conflicted."""
1534.3.1 by Robert Collins
* bzrlib.osutils.safe_unicode now exists to provide parameter coercion
1012
1185.35.1 by Aaron Bentley
Implemented conflicts.restore
1013
    def __init__(self, filename):
1014
        BzrNewError.__init__(self)
1015
        self.filename = filename
1185.35.13 by Aaron Bentley
Merged Martin
1016
1505.1.23 by John Arbash Meinel
Whitespace cleanup of bzrlib.errors
1017
2018.2.3 by Andrew Bennetts
Starting factoring out the smart server client "medium" from the protocol.
1018
class MediumNotConnected(BzrNewError):
1019
    """The medium '%(medium)s' is not connected."""
1020
1021
    def __init__(self, medium):
1022
        BzrNewError.__init__(self)
1023
        self.medium = medium
1024
1025
1492 by Robert Collins
Support decoration of commands.
1026
class MustUseDecorated(Exception):
1027
    """A decorating function has requested its original command be used.
1028
    
1029
    This should never escape bzr, so does not need to be printable.
1030
    """
1031
1185.82.3 by John Arbash Meinel
Working on creating a factor for serializing changesets.
1032
1185.82.130 by Aaron Bentley
Rename changesets to revision bundles
1033
class NoBundleFound(BzrNewError):
1034
    """No bundle was found in %(filename)s"""
1185.82.3 by John Arbash Meinel
Working on creating a factor for serializing changesets.
1035
    def __init__(self, filename):
1036
        BzrNewError.__init__(self)
1037
        self.filename = filename
1038
1039
1185.82.130 by Aaron Bentley
Rename changesets to revision bundles
1040
class BundleNotSupported(BzrNewError):
1041
    """Unable to handle bundle version %(version)s: %(msg)s"""
1185.82.3 by John Arbash Meinel
Working on creating a factor for serializing changesets.
1042
    def __init__(self, version, msg):
1043
        BzrNewError.__init__(self)
1044
        self.version = version
1045
        self.msg = msg
1046
1047
1185.35.42 by Aaron Bentley
Fixed fetch to be safer wrt ghosts and corrupt branches
1048
class MissingText(BzrNewError):
1049
    """Branch %(base)s is missing revision %(text_revision)s of %(file_id)s"""
1534.3.1 by Robert Collins
* bzrlib.osutils.safe_unicode now exists to provide parameter coercion
1050
1185.35.42 by Aaron Bentley
Fixed fetch to be safer wrt ghosts and corrupt branches
1051
    def __init__(self, branch, text_revision, file_id):
1534.3.1 by Robert Collins
* bzrlib.osutils.safe_unicode now exists to provide parameter coercion
1052
        BzrNewError.__init__(self)
1185.35.42 by Aaron Bentley
Fixed fetch to be safer wrt ghosts and corrupt branches
1053
        self.branch = branch
1054
        self.base = branch.base
1055
        self.text_revision = text_revision
1056
        self.file_id = file_id
1534.7.5 by Aaron Bentley
Got unique_add under test
1057
1505.1.23 by John Arbash Meinel
Whitespace cleanup of bzrlib.errors
1058
1534.7.5 by Aaron Bentley
Got unique_add under test
1059
class DuplicateKey(BzrNewError):
1060
    """Key %(key)s is already present in map"""
1534.7.6 by Aaron Bentley
Added conflict handling
1061
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
1062
1534.7.6 by Aaron Bentley
Added conflict handling
1063
class MalformedTransform(BzrNewError):
1534.7.49 by Aaron Bentley
Printed conflicts in MalformedTransform
1064
    """Tree transform is malformed %(conflicts)r"""
1534.7.24 by Aaron Bentley
Merge from the mainline
1065
1534.3.1 by Robert Collins
* bzrlib.osutils.safe_unicode now exists to provide parameter coercion
1066
1731.1.33 by Aaron Bentley
Revert no-special-root changes
1067
class NoFinalPath(BzrNewError):
1731.1.62 by Aaron Bentley
Changes from review comments
1068
    """No final name for trans_id %(trans_id)r
1069
    file-id: %(file_id)r"
1070
    root trans-id: %(root_trans_id)r 
1071
    """
1731.1.33 by Aaron Bentley
Revert no-special-root changes
1072
1073
    def __init__(self, trans_id, transform):
1074
        self.trans_id = trans_id
1075
        self.file_id = transform.final_file_id(trans_id)
1076
        self.root_trans_id = transform.root
1077
1078
1534.3.1 by Robert Collins
* bzrlib.osutils.safe_unicode now exists to provide parameter coercion
1079
class BzrBadParameter(BzrNewError):
1185.65.29 by Robert Collins
Implement final review suggestions.
1080
    """A bad parameter : %(param)s is not usable.
1534.3.1 by Robert Collins
* bzrlib.osutils.safe_unicode now exists to provide parameter coercion
1081
    
1185.65.29 by Robert Collins
Implement final review suggestions.
1082
    This exception should never be thrown, but it is a base class for all
1083
    parameter-to-function errors.
1084
    """
1534.3.1 by Robert Collins
* bzrlib.osutils.safe_unicode now exists to provide parameter coercion
1085
    def __init__(self, param):
1086
        BzrNewError.__init__(self)
1087
        self.param = param
1534.7.32 by Aaron Bentley
Got conflict handling working when conflicts involve existing files
1088
1534.4.3 by Robert Collins
Implement BranchTestProviderAdapter, so tests now run across all branch formats.
1089
1185.65.29 by Robert Collins
Implement final review suggestions.
1090
class BzrBadParameterNotUnicode(BzrBadParameter):
1091
    """Parameter %(param)s is neither unicode nor utf8."""
1534.7.120 by Aaron Bentley
PEP8 fixes
1092
1093
1534.7.32 by Aaron Bentley
Got conflict handling working when conflicts involve existing files
1094
class ReusingTransform(BzrNewError):
1095
    """Attempt to reuse a transform that has already been applied."""
1534.7.66 by Aaron Bentley
Ensured we don't accidentally move the root directory
1096
1534.7.120 by Aaron Bentley
PEP8 fixes
1097
1534.7.66 by Aaron Bentley
Ensured we don't accidentally move the root directory
1098
class CantMoveRoot(BzrNewError):
1099
    """Moving the root directory is not supported at this time"""
1185.65.29 by Robert Collins
Implement final review suggestions.
1100
1534.7.120 by Aaron Bentley
PEP8 fixes
1101
1185.65.29 by Robert Collins
Implement final review suggestions.
1102
class BzrBadParameterNotString(BzrBadParameter):
1103
    """Parameter %(param)s is not a string or unicode string."""
1185.62.24 by John Arbash Meinel
Changing the exception that sftp.py throws when it can't find paramiko, so that the test suite can handle it.
1104
1105
1534.4.44 by Robert Collins
Make a new BzrDir format that uses a versioned branch format in a branch/ subdirectory.
1106
class BzrBadParameterMissing(BzrBadParameter):
1107
    """Parameter $(param)s is required but not present."""
1108
1109
1666.1.6 by Robert Collins
Make knit the default format.
1110
class BzrBadParameterUnicode(BzrBadParameter):
1666.1.9 by Robert Collins
Mark knits as no longer experimental.
1111
    """Parameter %(param)s is unicode but only byte-strings are permitted."""
1666.1.6 by Robert Collins
Make knit the default format.
1112
1113
1114
class BzrBadParameterContainsNewline(BzrBadParameter):
1666.1.9 by Robert Collins
Mark knits as no longer experimental.
1115
    """Parameter %(param)s contains a newline."""
1666.1.6 by Robert Collins
Make knit the default format.
1116
1117
1185.62.24 by John Arbash Meinel
Changing the exception that sftp.py throws when it can't find paramiko, so that the test suite can handle it.
1118
class DependencyNotPresent(BzrNewError):
1540.3.7 by Martin Pool
Prepare to select a transport depending on what dependencies can be satisfied.
1119
    """Unable to import library "%(library)s": %(error)s"""
1185.62.24 by John Arbash Meinel
Changing the exception that sftp.py throws when it can't find paramiko, so that the test suite can handle it.
1120
1121
    def __init__(self, library, error):
1122
        BzrNewError.__init__(self, library=library, error=error)
1123
1124
1125
class ParamikoNotPresent(DependencyNotPresent):
1126
    """Unable to import paramiko (required for sftp support): %(error)s"""
1127
1128
    def __init__(self, error):
1129
        DependencyNotPresent.__init__(self, 'paramiko', error)
1130
1131
1979.2.1 by Robert Collins
(robertc) adds a convenience method "merge_from_branch" to WorkingTree.
1132
class PointlessMerge(BzrNewError):
1133
    """Nothing to merge."""
1134
1135
1534.4.3 by Robert Collins
Implement BranchTestProviderAdapter, so tests now run across all branch formats.
1136
class UninitializableFormat(BzrNewError):
1137
    """Format %(format)s cannot be initialised by this version of bzr."""
1138
1139
    def __init__(self, format):
1140
        BzrNewError.__init__(self)
1141
        self.format = format
1551.3.4 by Aaron Bentley
Implemented default command options
1142
1534.7.156 by Aaron Bentley
PEP8 fixes
1143
1910.2.12 by Aaron Bentley
Implement knit repo format 2
1144
class BadConversionTarget(BzrNewError):
1145
    """Cannot convert to format %(format)s.  %(problem)s"""
1146
1147
    def __init__(self, problem, format):
1148
        BzrNewError.__init__(self)
1149
        self.problem = problem
1150
        self.format = format
1151
1152
1711.2.56 by John Arbash Meinel
Raise NoDiff if 'diff' not present.
1153
class NoDiff(BzrNewError):
1154
    """Diff is not installed on this machine: %(msg)s"""
1155
1156
    def __init__(self, msg):
1899.1.1 by John Arbash Meinel
Fix the bug in the NoDiff exception class, and add a test
1157
        BzrNewError.__init__(self, msg=msg)
1711.2.56 by John Arbash Meinel
Raise NoDiff if 'diff' not present.
1158
1159
1534.7.130 by Aaron Bentley
More conflict handling, test porting
1160
class NoDiff3(BzrNewError):
1161
    """Diff3 is not installed on this machine."""
1534.7.162 by Aaron Bentley
Handle failures creating/deleting the Limbo directory
1162
1163
1164
class ExistingLimbo(BzrNewError):
1165
    """This tree contains left-over files from a failed operation.
1166
    Please examine %(limbo_dir)s to see if it contains any files you wish to
1167
    keep, and delete it when you are done.
1168
    """
1169
    def __init__(self, limbo_dir):
1170
       BzrNewError.__init__(self)
1171
       self.limbo_dir = limbo_dir
1172
1173
1174
class ImmortalLimbo(BzrNewError):
1175
    """Unable to delete transform temporary directory $(limbo_dir)s.
1176
    Please examine %(limbo_dir)s to see if it contains any files you wish to
1177
    keep, and delete it when you are done.
1178
    """
1179
    def __init__(self, limbo_dir):
1180
       BzrNewError.__init__(self)
1181
       self.limbo_dir = limbo_dir
1534.7.163 by Aaron Bentley
Merge from Robert [Fails tests]
1182
1183
1508.1.22 by Robert Collins
implement out of date working tree checks in commit.
1184
class OutOfDateTree(BzrNewError):
1185
    """Working tree is out of date, please run 'bzr update'."""
1508.1.25 by Robert Collins
Update per review comments.
1186
1187
    def __init__(self, tree):
1188
        BzrNewError.__init__(self)
1189
        self.tree = tree
1534.7.196 by Aaron Bentley
Switched to Rio format for merge-modified list
1190
1563.2.22 by Robert Collins
Move responsibility for repository.has_revision into RevisionStore
1191
1534.7.196 by Aaron Bentley
Switched to Rio format for merge-modified list
1192
class MergeModifiedFormatError(BzrNewError):
1193
    """Error in merge modified format"""
1534.7.200 by Aaron Bentley
Merge from mainline
1194
1195
1534.10.7 by Aaron Bentley
Added tests for bad conflict lists
1196
class ConflictFormatError(BzrNewError):
1197
    """Format error in conflict listings"""
1198
1199
1570.1.13 by Robert Collins
Check for incorrect revision parentage in the weave during revision access.
1200
class CorruptRepository(BzrNewError):
1201
    """An error has been detected in the repository %(repo_path)s.
1202
Please run bzr reconcile on this repository."""
1203
1204
    def __init__(self, repo):
1205
        BzrNewError.__init__(self)
1206
        self.repo_path = repo.bzrdir.root_transport.base
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
1207
1208
1209
class UpgradeRequired(BzrNewError):
1210
    """To use this feature you must upgrade your branch at %(path)s."""
1211
1212
    def __init__(self, path):
1213
        BzrNewError.__init__(self)
1214
        self.path = path
1215
1587.1.8 by Robert Collins
Local commits on unbound branches fail.
1216
1217
class LocalRequiresBoundBranch(BzrNewError):
1218
    """Cannot perform local-only commits on unbound branches."""
1594.1.1 by Robert Collins
Introduce new bzr progress bar api. ui_factory.nested_progress_bar.
1219
1220
1221
class MissingProgressBarFinish(BzrNewError):
1222
    """A nested progress bar was not 'finished' correctly."""
1534.10.8 by Aaron Bentley
Implemented conflict_lines in terms of old system on WorkingTree
1223
1224
1843.3.7 by John Arbash Meinel
new env var 'BZR_PROGRESS_BAR' to select the exact progress type
1225
class InvalidProgressBarType(BzrNewError):
1226
    """Environment variable BZR_PROGRESS_BAR='%(bar_type)s is not a supported type
1227
Select one of: %(valid_types)s"""
1228
1229
    def __init__(self, bar_type, valid_types):
1230
        BzrNewError.__init__(self, bar_type=bar_type, valid_types=valid_types)
1231
1232
1534.10.8 by Aaron Bentley
Implemented conflict_lines in terms of old system on WorkingTree
1233
class UnsupportedOperation(BzrNewError):
1234
    """The method %(mname)s is not supported on objects of type %(tname)s."""
1235
    def __init__(self, method, method_self):
1236
        self.method = method
1237
        self.mname = method.__name__
1238
        self.tname = type(method_self).__name__
1558.15.1 by Aaron Bentley
Add text_file function
1239
1240
1241
class BinaryFile(BzrNewError):
1242
    """File is binary but should be text."""
1551.2.55 by abentley
Fix fileid involed tests on win32 (by skipping them for unescaped weave formats)
1243
1244
1245
class IllegalPath(BzrNewError):
1246
    """The path %(path)s is not permitted on this platform"""
1247
1248
    def __init__(self, path):
1249
        BzrNewError.__init__(self)
1250
        self.path = path
1185.82.118 by Aaron Bentley
Ensure that StrictTestament handles execute bit differences
1251
1252
1253
class TestamentMismatch(BzrNewError):
1254
    """Testament did not match expected value.  
1255
       For revision_id {%(revision_id)s}, expected {%(expected)s}, measured 
1256
       {%(measured)s}
1257
    """
1258
    def __init__(self, revision_id, expected, measured):
1259
        self.revision_id = revision_id
1260
        self.expected = expected
1261
        self.measured = measured
1185.82.131 by Aaron Bentley
Move BadBundle error (and subclasses) to errors.py
1262
1263
1185.82.139 by Aaron Bentley
Raise NotABundle when a non-bundle is supplied
1264
class NotABundle(BzrNewError):
1265
    """Not a bzr revision-bundle: %(text)r"""
1185.82.142 by Aaron Bentley
Update for review comments
1266
1185.82.139 by Aaron Bentley
Raise NotABundle when a non-bundle is supplied
1267
    def __init__(self, text):
1907.2.1 by Hermann Kraus
Convert bundle errors from Exception to BzrNewError.
1268
        BzrNewError.__init__(self)
1269
        self.text = text
1270
1271
1272
class BadBundle(BzrNewError): 
1273
    """Bad bzr revision-bundle: %(text)r"""
1274
1275
    def __init__(self, text):
1276
        BzrNewError.__init__(self)
1277
        self.text = text
1278
1279
1280
class MalformedHeader(BadBundle): 
1281
    """Malformed bzr revision-bundle header: %(text)r"""
1282
1283
    def __init__(self, text):
1284
        BzrNewError.__init__(self)
1285
        self.text = text
1286
1287
1288
class MalformedPatches(BadBundle): 
1289
    """Malformed patches in bzr revision-bundle: %(text)r"""
1290
1291
    def __init__(self, text):
1292
        BzrNewError.__init__(self)
1293
        self.text = text
1294
1295
1296
class MalformedFooter(BadBundle): 
1297
    """Malformed footer in bzr revision-bundle: %(text)r"""
1298
1299
    def __init__(self, text):
1300
        BzrNewError.__init__(self)
1907.2.2 by Hermann Kraus
Detect wrong eol markers.
1301
        self.text = text
1302
1752.3.14 by Andrew Bennetts
Fix shallow bug (bad conflict resolution?) in errors.UnsupportedEOLMarker
1303
1907.2.2 by Hermann Kraus
Detect wrong eol markers.
1304
class UnsupportedEOLMarker(BadBundle):
1305
    """End of line marker was not \\n in bzr revision-bundle"""    
1306
1307
    def __init__(self):
1908.5.9 by Robert Collins
Add a guard against setting the tree last-revision value to a ghost in the new tree parent management api.
1308
        BzrNewError.__init__(self)
1910.2.31 by Aaron Bentley
Fix bugs in basis inventory handling, change filename
1309
1310
1910.2.49 by Aaron Bentley
Ensure that 0.8 bundles aren't used with KnitRepository2
1311
class IncompatibleFormat(BzrNewError):
1312
    """Bundle format %(bundle_format)s is incompatible with %(other)s"""
1313
1314
    def __init__(self, bundle_format, other):
1315
        BzrNewError.__init__(self)
1316
        self.bundle_format = bundle_format
1317
        self.other = other
1318
1319
1910.2.31 by Aaron Bentley
Fix bugs in basis inventory handling, change filename
1320
class BadInventoryFormat(BzrNewError):
1321
    """Root class for inventory serialization errors"""
1322
1323
1324
class UnexpectedInventoryFormat(BadInventoryFormat):
1325
    """The inventory was not in the expected format:\n %(msg)s"""
1326
1327
    def __init__(self, msg):
1328
        BadInventoryFormat.__init__(self, msg=msg)
1910.2.47 by Aaron Bentley
Merge bzr.dev
1329
1330
2018.2.3 by Andrew Bennetts
Starting factoring out the smart server client "medium" from the protocol.
1331
class NoSmartMedium(BzrNewError):
1332
    """The transport '%(transport)s' cannot tunnel the smart protocol."""
1333
1334
    def __init__(self, transport):
1335
        BzrNewError.__init__(self)
1336
        self.transport = transport
1337
1338
1910.19.2 by Andrew Bennetts
Add a new method ``Transport.get_smart_client()``. This is provided to allow
1339
class NoSmartServer(NotBranchError):
1340
    """No smart server available at %(url)s"""
1341
1342
    def __init__(self, url):
1343
        self.url = url
1752.3.9 by Andrew Bennetts
Merge from bzr.dev
1344
1752.5.3 by Andrew Bennetts
Merge from sftp refactoring 2.
1345
1951.1.8 by Andrew Bennetts
Make _get_ssh_vendor return the vendor object, rather than just a string.
1346
class UnknownSSH(BzrNewError):
1347
    """Unrecognised value for BZR_SSH environment variable: %(vendor)s"""
1348
1349
    def __init__(self, vendor):
1350
        BzrNewError.__init__(self)
1351
        self.vendor = vendor
1352
1908.5.16 by Robert Collins
Merge bzr.dev to resolve conflicts for merging.
1353
1908.5.12 by Robert Collins
Apply review feedback - paired with Martin.
1354
class GhostRevisionUnusableHere(BzrNewError):
1355
    """Ghost revision {%(revision_id)s} cannot be used here."""
1908.5.9 by Robert Collins
Add a guard against setting the tree last-revision value to a ghost in the new tree parent management api.
1356
1357
    def __init__(self, revision_id):
1358
        BzrNewError.__init__(self)
1359
        self.revision_id = revision_id
1996.1.16 by John Arbash Meinel
Raise an exception when ScopeReplacer has been misused
1360
1361
1362
class IllegalUseOfScopeReplacer(BzrNewError):
1363
    """ScopeReplacer object %(name)r was used incorrectly: %(msg)s%(extra)s"""
1364
1365
    is_user_error = False
1366
1367
    def __init__(self, name, msg, extra=None):
1368
        BzrNewError.__init__(self)
1369
        self.name = name
1370
        self.msg = msg
1371
        if extra:
1372
            self.extra = ': ' + str(extra)
1373
        else:
1374
            self.extra = ''
1375
1996.1.18 by John Arbash Meinel
Add more structured error handling
1376
1377
class InvalidImportLine(BzrNewError):
1378
    """Not a valid import statement: %(msg)\n%(text)s"""
1379
1380
    is_user_error = False
1381
1382
    def __init__(self, text, msg):
1383
        BzrNewError.__init__(self)
1384
        self.text = text
1385
        self.msg = msg
1386
1387
1388
class ImportNameCollision(BzrNewError):
1389
    """Tried to import an object to the same name as an existing object. %(name)s"""
1390
1391
    is_user_error = False
1392
1393
    def __init__(self, name):
1394
        BzrNewError.__init__(self)
1395
        self.name = name