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