/brz/remove-bazaar

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