/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
1185.22.1 by Michael Ellerman
Implement strict commits with --strict flag.
507
class StrictCommitFailed(Exception):
508
    """Commit refused because there are unknowns in the tree."""
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
509
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
510
1740.5.6 by Martin Pool
Clean up many exception classes.
511
class NoSuchRevision(BzrNewError):
512
    """Branch %(branch)s has no revision %(revision)s"""
513
514
    is_user_error = False
515
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
516
    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
517
        BzrNewError.__init__(self, branch=branch, revision=revision)
518
519
1948.4.25 by John Arbash Meinel
Check that invalid specs are properly handled
520
class NoSuchRevisionSpec(BzrNewError):
521
    """No namespace registered for string: %(spec)r"""
522
523
    def __init__(self, spec):
524
        BzrNewError.__init__(self, spec=spec)
525
526
1948.4.24 by John Arbash Meinel
Change inheritence of InvalidRevisionSpec
527
class InvalidRevisionSpec(BzrNewError):
1948.4.15 by John Arbash Meinel
Change the InvalidRevisionSpec formatting to be more readable
528
    """Requested revision: '%(spec)s' does not exist in branch:
529
%(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
530
531
    def __init__(self, spec, branch, extra=None):
1948.4.24 by John Arbash Meinel
Change inheritence of InvalidRevisionSpec
532
        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
533
        if extra:
1948.4.15 by John Arbash Meinel
Change the InvalidRevisionSpec formatting to be more readable
534
            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
535
        else:
536
            self.extra = ''
1740.5.6 by Martin Pool
Clean up many exception classes.
537
538
1192 by Martin Pool
- clean up code for retrieving stored inventories
539
class HistoryMissing(BzrError):
540
    def __init__(self, branch, object_type, object_id):
541
        self.branch = branch
542
        BzrError.__init__(self,
543
                          '%s is missing %s {%s}'
544
                          % (branch, object_type, object_id))
545
546
1740.5.6 by Martin Pool
Clean up many exception classes.
547
class DivergedBranches(BzrNewError):
548
    "These branches have diverged.  Use the merge command to reconcile them."""
549
550
    is_user_error = True
1649.1.1 by Robert Collins
* 'pull' and 'push' now normalise the revision history, so that any two
551
1185.2.1 by Lalo Martins
moving DivergedBranches from bzrlib.branch to bzrlib.errors, obeying:
552
    def __init__(self, branch1, branch2):
553
        self.branch1 = branch1
554
        self.branch2 = branch2
555
1390 by Robert Collins
pair programming worx... merge integration and weave
556
1740.5.6 by Martin Pool
Clean up many exception classes.
557
class UnrelatedBranches(BzrNewError):
558
    "Branches have no common ancestor, and no merge base revision was specified."
559
560
    is_user_error = True
561
562
563
class NoCommonAncestor(BzrNewError):
564
    "Revisions have no common ancestor: %(revision_a)s %(revision_b)s"
565
974.1.80 by Aaron Bentley
Improved merge error handling and testing
566
    def __init__(self, revision_a, revision_b):
1740.5.6 by Martin Pool
Clean up many exception classes.
567
        self.revision_a = revision_a
568
        self.revision_b = revision_b
974.1.80 by Aaron Bentley
Improved merge error handling and testing
569
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
570
974.1.80 by Aaron Bentley
Improved merge error handling and testing
571
class NoCommonRoot(BzrError):
572
    def __init__(self, revision_a, revision_b):
573
        msg = "Revisions are not derived from the same root: %s %s." \
574
            % (revision_a, revision_b) 
575
        BzrError.__init__(self, msg)
1105 by Martin Pool
- expose 'find-merge-base' as a new expert command,
576
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
577
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
578
974.2.7 by aaron.bentley at utoronto
Merged from bzr.24
579
class NotAncestor(BzrError):
580
    def __init__(self, rev_id, not_ancestor_id):
1185.1.14 by Robert Collins
remove more duplicate merged hunks. Bad MERGE3, BAD.
581
        msg = "Revision %s is not an ancestor of %s" % (not_ancestor_id, 
582
                                                        rev_id)
583
        BzrError.__init__(self, msg)
584
        self.rev_id = rev_id
585
        self.not_ancestor_id = not_ancestor_id
1185.1.12 by Robert Collins
merge in lsdiff/filterdiff friendliness
586
587
974.1.30 by aaron.bentley at utoronto
Changed copy_multi to permit failure and return a tuple, tested missing required revisions
588
class InstallFailed(BzrError):
589
    def __init__(self, revisions):
1185.1.14 by Robert Collins
remove more duplicate merged hunks. Bad MERGE3, BAD.
590
        msg = "Could not install revisions:\n%s" % " ,".join(revisions)
591
        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
592
        self.revisions = revisions
1154 by Martin Pool
- fix imports for moved errors
593
594
1614.2.13 by Olaf Conradi
Re-added AmbiguousBase with a deprecated warning.
595
class AmbiguousBase(BzrError):
596
    def __init__(self, bases):
597
        warn("BzrError AmbiguousBase has been deprecated as of bzrlib 0.8.",
598
                DeprecationWarning)
1759.2.1 by Jelmer Vernooij
Fix some types (found using aspell).
599
        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.
600
            ", ".join(bases)
601
        BzrError.__init__(self, msg)
602
        self.bases = bases
603
604
1948.4.20 by John Arbash Meinel
Make NoCommits a BzrNewError
605
class NoCommits(BzrNewError):
606
    """Branch %(branch)s has no commits."""
607
974.1.80 by Aaron Bentley
Improved merge error handling and testing
608
    def __init__(self, branch):
1948.4.20 by John Arbash Meinel
Make NoCommits a BzrNewError
609
        BzrNewError.__init__(self, branch=branch)
1185.10.1 by Aaron Bentley
Added --basis option to bzr branch
610
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
611
1185.10.1 by Aaron Bentley
Added --basis option to bzr branch
612
class UnlistableStore(BzrError):
613
    def __init__(self, store):
614
        BzrError.__init__(self, "Store %s is not listable" % store)
615
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
616
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
617
1185.10.1 by Aaron Bentley
Added --basis option to bzr branch
618
class UnlistableBranch(BzrError):
619
    def __init__(self, br):
620
        BzrError.__init__(self, "Stores for branch %s are not listable" % br)
1392 by Robert Collins
reinstate testfetch test case
621
622
1505.1.24 by John Arbash Meinel
Updated commit to handle bound branches. Included test to handle commit after merge
623
class BoundBranchOutOfDate(BzrNewError):
624
    """Bound branch %(branch)s is out of date with master branch %(master)s."""
625
    def __init__(self, branch, master):
626
        BzrNewError.__init__(self)
627
        self.branch = branch
628
        self.master = master
629
630
        
631
class CommitToDoubleBoundBranch(BzrNewError):
632
    """Cannot commit to branch %(branch)s. It is bound to %(master)s, which is bound to %(remote)s."""
633
    def __init__(self, branch, master, remote):
634
        BzrNewError.__init__(self)
635
        self.branch = branch
636
        self.master = master
637
        self.remote = remote
638
1505.1.25 by John Arbash Meinel
Updated pull. Now all paths which call set_revision_history maintain the branch invariant. All tests pass.
639
640
class OverwriteBoundBranch(BzrNewError):
641
    """Cannot pull --overwrite to a branch which is bound %(branch)s"""
642
    def __init__(self, branch):
643
        BzrNewError.__init__(self)
644
        self.branch = branch
645
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
646
647
class BoundBranchConnectionFailure(BzrNewError):
648
    """Unable to connect to target of bound branch %(branch)s => %(target)s: %(error)s"""
649
    def __init__(self, branch, target, error):
650
        BzrNewError.__init__(self)
651
        self.branch = branch
652
        self.target = target
653
        self.error = error
654
655
1185.16.116 by mbp at sourcefrog
Move weave errors into bzrlib.errors and make consistent with new system.
656
class WeaveError(BzrNewError):
657
    """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.
658
1185.16.116 by mbp at sourcefrog
Move weave errors into bzrlib.errors and make consistent with new system.
659
    def __init__(self, message=None):
660
        BzrNewError.__init__(self)
661
        self.message = message
662
663
664
class WeaveRevisionAlreadyPresent(WeaveError):
665
    """Revision {%(revision_id)s} already present in %(weave)s"""
666
    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.
667
1185.16.116 by mbp at sourcefrog
Move weave errors into bzrlib.errors and make consistent with new system.
668
        WeaveError.__init__(self)
669
        self.revision_id = revision_id
670
        self.weave = weave
671
672
673
class WeaveRevisionNotPresent(WeaveError):
674
    """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.
675
1185.16.116 by mbp at sourcefrog
Move weave errors into bzrlib.errors and make consistent with new system.
676
    def __init__(self, revision_id, weave):
677
        WeaveError.__init__(self)
678
        self.revision_id = revision_id
679
        self.weave = weave
680
681
682
class WeaveFormatError(WeaveError):
683
    """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.
684
1185.16.116 by mbp at sourcefrog
Move weave errors into bzrlib.errors and make consistent with new system.
685
    def __init__(self, what):
686
        WeaveError.__init__(self)
687
        self.what = what
688
689
690
class WeaveParentMismatch(WeaveError):
691
    """Parents are mismatched between two revisions."""
692
    
1393.2.1 by John Arbash Meinel
Merged in split-storage-2 branch. Need to cleanup a little bit more still.
693
1185.50.23 by John Arbash Meinel
Adding sha1 check when weave extracts a text.
694
class WeaveInvalidChecksum(WeaveError):
695
    """Text did not match it's checksum: %(message)s"""
696
697
1551.3.11 by Aaron Bentley
Merge from Robert
698
class WeaveTextDiffers(WeaveError):
699
    """Weaves differ on text content. Revision: {%(revision_id)s}, %(weave_a)s, %(weave_b)s"""
700
701
    def __init__(self, revision_id, weave_a, weave_b):
702
        WeaveError.__init__(self)
703
        self.revision_id = revision_id
704
        self.weave_a = weave_a
705
        self.weave_b = weave_b
706
707
1534.7.158 by Aaron Bentley
Merged John Meinel's integration
708
class WeaveTextDiffers(WeaveError):
709
    """Weaves differ on text content. Revision: {%(revision_id)s}, %(weave_a)s, %(weave_b)s"""
710
711
    def __init__(self, revision_id, weave_a, weave_b):
712
        WeaveError.__init__(self)
713
        self.revision_id = revision_id
714
        self.weave_a = weave_a
715
        self.weave_b = weave_b
716
717
1563.2.1 by Robert Collins
Merge in a variation of the versionedfile api from versioned-file.
718
class VersionedFileError(BzrNewError):
719
    """Versioned file error."""
720
721
722
class RevisionNotPresent(VersionedFileError):
723
    """Revision {%(revision_id)s} not present in %(file_id)s."""
724
725
    def __init__(self, revision_id, file_id):
726
        VersionedFileError.__init__(self)
727
        self.revision_id = revision_id
728
        self.file_id = file_id
729
730
731
class RevisionAlreadyPresent(VersionedFileError):
732
    """Revision {%(revision_id)s} already present in %(file_id)s."""
733
734
    def __init__(self, revision_id, file_id):
735
        VersionedFileError.__init__(self)
736
        self.revision_id = revision_id
737
        self.file_id = file_id
738
739
740
class KnitError(BzrNewError):
741
    """Knit error"""
742
743
744
class KnitHeaderError(KnitError):
745
    """Knit header error: %(badline)r unexpected"""
746
747
    def __init__(self, badline):
748
        KnitError.__init__(self)
749
        self.badline = badline
750
751
752
class KnitCorrupt(KnitError):
753
    """Knit %(filename)s corrupt: %(how)s"""
754
755
    def __init__(self, filename, how):
756
        KnitError.__init__(self)
757
        self.filename = filename
758
        self.how = how
759
760
1185.31.12 by John Arbash Meinel
Refactored the export code to make it easier to add new export formats.
761
class NoSuchExportFormat(BzrNewError):
762
    """Export format %(format)r not supported"""
763
    def __init__(self, format):
764
        BzrNewError.__init__(self)
765
        self.format = format
766
767
1824.2.1 by Johan Rydberg
Let TransportError inherit BzrNerError.
768
class TransportError(BzrNewError):
769
    """Transport error: %(msg)s %(orig_error)s"""
770
1185.11.9 by John Arbash Meinel
Most tests pass, some problems with unavailable socket recv
771
    def __init__(self, msg=None, orig_error=None):
772
        if msg is None and orig_error is not None:
773
            msg = str(orig_error)
1824.2.1 by Johan Rydberg
Let TransportError inherit BzrNerError.
774
        if orig_error is None:
775
            orig_error = ''
776
        if msg is None:
777
            msg =  ''
1185.11.9 by John Arbash Meinel
Most tests pass, some problems with unavailable socket recv
778
        self.msg = msg
779
        self.orig_error = orig_error
1824.2.1 by Johan Rydberg
Let TransportError inherit BzrNerError.
780
        BzrNewError.__init__(self)
1185.11.9 by John Arbash Meinel
Most tests pass, some problems with unavailable socket recv
781
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
782
1185.11.9 by John Arbash Meinel
Most tests pass, some problems with unavailable socket recv
783
# A set of semi-meaningful errors which can be thrown
784
class TransportNotPossible(TransportError):
1824.2.1 by Johan Rydberg
Let TransportError inherit BzrNerError.
785
    """Transport operation not possible: %(msg)s %(orig_error)%"""
1185.11.9 by John Arbash Meinel
Most tests pass, some problems with unavailable socket recv
786
1185.31.44 by John Arbash Meinel
Cleaned up Exceptions for all transports.
787
788
class ConnectionError(TransportError):
1824.2.1 by Johan Rydberg
Let TransportError inherit BzrNerError.
789
    """Connection error: %(msg)s %(orig_error)s"""
1185.31.44 by John Arbash Meinel
Cleaned up Exceptions for all transports.
790
1185.11.9 by John Arbash Meinel
Most tests pass, some problems with unavailable socket recv
791
792
class ConnectionReset(TransportError):
1824.2.1 by Johan Rydberg
Let TransportError inherit BzrNerError.
793
    """Connection closed: %(msg)s %(orig_error)s"""
1185.11.9 by John Arbash Meinel
Most tests pass, some problems with unavailable socket recv
794
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
795
1786.1.8 by John Arbash Meinel
[merge] Johan Rydberg test updates
796
class InvalidRange(TransportError):
797
    """Invalid range access."""
798
    
799
    def __init__(self, path, offset):
800
        TransportError.__init__(self, ("Invalid range access in %s at %d"
801
                                       % (path, offset)))
802
803
1786.1.17 by John Arbash Meinel
Adding tests for _parse_boundary.
804
class InvalidHttpResponse(TransportError):
805
    """Invalid http response for %(path)s: %(msg)s"""
806
1786.1.31 by John Arbash Meinel
Update http errors to properly use BzrNewError
807
    def __init__(self, path, msg, orig_error=None):
1786.1.17 by John Arbash Meinel
Adding tests for _parse_boundary.
808
        self.path = path
1786.1.31 by John Arbash Meinel
Update http errors to properly use BzrNewError
809
        TransportError.__init__(self, msg, orig_error=orig_error)
1786.1.17 by John Arbash Meinel
Adding tests for _parse_boundary.
810
811
812
class InvalidHttpRange(InvalidHttpResponse):
1786.1.13 by John Arbash Meinel
Found a few bugs in error handling code, updated tests
813
    """Invalid http range "%(range)s" for %(path)s: %(msg)s"""
814
    
815
    def __init__(self, path, range, msg):
816
        self.range = range
1786.1.17 by John Arbash Meinel
Adding tests for _parse_boundary.
817
        InvalidHttpResponse.__init__(self, path, msg)
818
819
820
class InvalidHttpContentType(InvalidHttpResponse):
821
    """Invalid http Content-type "%(ctype)s" for %(path)s: %(msg)s"""
822
    
823
    def __init__(self, path, ctype, msg):
824
        self.ctype = ctype
825
        InvalidHttpResponse.__init__(self, path, msg)
1786.1.13 by John Arbash Meinel
Found a few bugs in error handling code, updated tests
826
827
1185.14.10 by Aaron Bentley
Commit aborts with conflicts in the tree.
828
class ConflictsInTree(BzrError):
829
    def __init__(self):
830
        BzrError.__init__(self, "Working tree has conflicts.")
1185.12.49 by Aaron Bentley
Switched to ConfigObj
831
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
832
1185.12.49 by Aaron Bentley
Switched to ConfigObj
833
class ParseConfigError(BzrError):
834
    def __init__(self, errors, filename):
835
        if filename is None:
836
            filename = ""
837
        message = "Error(s) parsing config file %s:\n%s" % \
838
            (filename, ('\n'.join(e.message for e in errors)))
839
        BzrError.__init__(self, message)
1185.12.52 by Aaron Bentley
Merged more config stuff from Robert
840
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
841
1442.1.58 by Robert Collins
gpg signing of content
842
class SigningFailed(BzrError):
843
    def __init__(self, command_line):
844
        BzrError.__init__(self, "Failed to gpg sign data with command '%s'"
845
                               % command_line)
1185.12.83 by Aaron Bentley
Preliminary weave merge support
846
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
847
1185.12.83 by Aaron Bentley
Preliminary weave merge support
848
class WorkingTreeNotRevision(BzrError):
849
    def __init__(self, tree):
850
        BzrError.__init__(self, "The working tree for %s has changed since"
851
                          " last commit, but weave merge requires that it be"
852
                          " unchanged." % tree.basedir)
1185.12.104 by Aaron Bentley
Merged Martin's latest
853
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
854
1185.24.1 by Aaron Bentley
Got reprocessing working
855
class CantReprocessAndShowBase(BzrNewError):
856
    """Can't reprocess and show base.
857
Reprocessing obscures relationship of conflicting lines to base."""
1185.24.2 by Aaron Bentley
Merge from mainline
858
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
859
1185.16.114 by mbp at sourcefrog
Improved topological sort
860
class GraphCycleError(BzrNewError):
861
    """Cycle in graph %(graph)r"""
862
    def __init__(self, graph):
863
        BzrNewError.__init__(self)
864
        self.graph = graph
1185.35.1 by Aaron Bentley
Implemented conflicts.restore
865
1505.1.23 by John Arbash Meinel
Whitespace cleanup of bzrlib.errors
866
1185.35.1 by Aaron Bentley
Implemented conflicts.restore
867
class NotConflicted(BzrNewError):
1185.35.4 by Aaron Bentley
Implemented remerge
868
    """File %(filename)s is not conflicted."""
1534.3.1 by Robert Collins
* bzrlib.osutils.safe_unicode now exists to provide parameter coercion
869
1185.35.1 by Aaron Bentley
Implemented conflicts.restore
870
    def __init__(self, filename):
871
        BzrNewError.__init__(self)
872
        self.filename = filename
1185.35.13 by Aaron Bentley
Merged Martin
873
1505.1.23 by John Arbash Meinel
Whitespace cleanup of bzrlib.errors
874
1492 by Robert Collins
Support decoration of commands.
875
class MustUseDecorated(Exception):
876
    """A decorating function has requested its original command be used.
877
    
878
    This should never escape bzr, so does not need to be printable.
879
    """
880
1185.82.3 by John Arbash Meinel
Working on creating a factor for serializing changesets.
881
1185.82.130 by Aaron Bentley
Rename changesets to revision bundles
882
class NoBundleFound(BzrNewError):
883
    """No bundle was found in %(filename)s"""
1185.82.3 by John Arbash Meinel
Working on creating a factor for serializing changesets.
884
    def __init__(self, filename):
885
        BzrNewError.__init__(self)
886
        self.filename = filename
887
888
1185.82.130 by Aaron Bentley
Rename changesets to revision bundles
889
class BundleNotSupported(BzrNewError):
890
    """Unable to handle bundle version %(version)s: %(msg)s"""
1185.82.3 by John Arbash Meinel
Working on creating a factor for serializing changesets.
891
    def __init__(self, version, msg):
892
        BzrNewError.__init__(self)
893
        self.version = version
894
        self.msg = msg
895
896
1185.35.42 by Aaron Bentley
Fixed fetch to be safer wrt ghosts and corrupt branches
897
class MissingText(BzrNewError):
898
    """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
899
1185.35.42 by Aaron Bentley
Fixed fetch to be safer wrt ghosts and corrupt branches
900
    def __init__(self, branch, text_revision, file_id):
1534.3.1 by Robert Collins
* bzrlib.osutils.safe_unicode now exists to provide parameter coercion
901
        BzrNewError.__init__(self)
1185.35.42 by Aaron Bentley
Fixed fetch to be safer wrt ghosts and corrupt branches
902
        self.branch = branch
903
        self.base = branch.base
904
        self.text_revision = text_revision
905
        self.file_id = file_id
1534.7.5 by Aaron Bentley
Got unique_add under test
906
1505.1.23 by John Arbash Meinel
Whitespace cleanup of bzrlib.errors
907
1534.7.5 by Aaron Bentley
Got unique_add under test
908
class DuplicateKey(BzrNewError):
909
    """Key %(key)s is already present in map"""
1534.7.6 by Aaron Bentley
Added conflict handling
910
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
911
1534.7.6 by Aaron Bentley
Added conflict handling
912
class MalformedTransform(BzrNewError):
1534.7.49 by Aaron Bentley
Printed conflicts in MalformedTransform
913
    """Tree transform is malformed %(conflicts)r"""
1534.7.24 by Aaron Bentley
Merge from the mainline
914
1534.3.1 by Robert Collins
* bzrlib.osutils.safe_unicode now exists to provide parameter coercion
915
916
class BzrBadParameter(BzrNewError):
1185.65.29 by Robert Collins
Implement final review suggestions.
917
    """A bad parameter : %(param)s is not usable.
1534.3.1 by Robert Collins
* bzrlib.osutils.safe_unicode now exists to provide parameter coercion
918
    
1185.65.29 by Robert Collins
Implement final review suggestions.
919
    This exception should never be thrown, but it is a base class for all
920
    parameter-to-function errors.
921
    """
1534.3.1 by Robert Collins
* bzrlib.osutils.safe_unicode now exists to provide parameter coercion
922
    def __init__(self, param):
923
        BzrNewError.__init__(self)
924
        self.param = param
1534.7.32 by Aaron Bentley
Got conflict handling working when conflicts involve existing files
925
1534.4.3 by Robert Collins
Implement BranchTestProviderAdapter, so tests now run across all branch formats.
926
1185.65.29 by Robert Collins
Implement final review suggestions.
927
class BzrBadParameterNotUnicode(BzrBadParameter):
928
    """Parameter %(param)s is neither unicode nor utf8."""
1534.7.120 by Aaron Bentley
PEP8 fixes
929
930
1534.7.32 by Aaron Bentley
Got conflict handling working when conflicts involve existing files
931
class ReusingTransform(BzrNewError):
932
    """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
933
1534.7.120 by Aaron Bentley
PEP8 fixes
934
1534.7.66 by Aaron Bentley
Ensured we don't accidentally move the root directory
935
class CantMoveRoot(BzrNewError):
936
    """Moving the root directory is not supported at this time"""
1185.65.29 by Robert Collins
Implement final review suggestions.
937
1534.7.120 by Aaron Bentley
PEP8 fixes
938
1185.65.29 by Robert Collins
Implement final review suggestions.
939
class BzrBadParameterNotString(BzrBadParameter):
940
    """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.
941
942
1534.4.44 by Robert Collins
Make a new BzrDir format that uses a versioned branch format in a branch/ subdirectory.
943
class BzrBadParameterMissing(BzrBadParameter):
944
    """Parameter $(param)s is required but not present."""
945
946
1666.1.6 by Robert Collins
Make knit the default format.
947
class BzrBadParameterUnicode(BzrBadParameter):
1666.1.9 by Robert Collins
Mark knits as no longer experimental.
948
    """Parameter %(param)s is unicode but only byte-strings are permitted."""
1666.1.6 by Robert Collins
Make knit the default format.
949
950
951
class BzrBadParameterContainsNewline(BzrBadParameter):
1666.1.9 by Robert Collins
Mark knits as no longer experimental.
952
    """Parameter %(param)s contains a newline."""
1666.1.6 by Robert Collins
Make knit the default format.
953
954
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.
955
class DependencyNotPresent(BzrNewError):
1540.3.7 by Martin Pool
Prepare to select a transport depending on what dependencies can be satisfied.
956
    """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.
957
958
    def __init__(self, library, error):
959
        BzrNewError.__init__(self, library=library, error=error)
960
961
962
class ParamikoNotPresent(DependencyNotPresent):
963
    """Unable to import paramiko (required for sftp support): %(error)s"""
964
965
    def __init__(self, error):
966
        DependencyNotPresent.__init__(self, 'paramiko', error)
967
968
1534.4.3 by Robert Collins
Implement BranchTestProviderAdapter, so tests now run across all branch formats.
969
class UninitializableFormat(BzrNewError):
970
    """Format %(format)s cannot be initialised by this version of bzr."""
971
972
    def __init__(self, format):
973
        BzrNewError.__init__(self)
974
        self.format = format
1551.3.4 by Aaron Bentley
Implemented default command options
975
1534.7.156 by Aaron Bentley
PEP8 fixes
976
1711.2.56 by John Arbash Meinel
Raise NoDiff if 'diff' not present.
977
class NoDiff(BzrNewError):
978
    """Diff is not installed on this machine: %(msg)s"""
979
980
    def __init__(self, msg):
1899.1.1 by John Arbash Meinel
Fix the bug in the NoDiff exception class, and add a test
981
        BzrNewError.__init__(self, msg=msg)
1711.2.56 by John Arbash Meinel
Raise NoDiff if 'diff' not present.
982
983
1534.7.130 by Aaron Bentley
More conflict handling, test porting
984
class NoDiff3(BzrNewError):
985
    """Diff3 is not installed on this machine."""
1534.7.162 by Aaron Bentley
Handle failures creating/deleting the Limbo directory
986
987
988
class ExistingLimbo(BzrNewError):
989
    """This tree contains left-over files from a failed operation.
990
    Please examine %(limbo_dir)s to see if it contains any files you wish to
991
    keep, and delete it when you are done.
992
    """
993
    def __init__(self, limbo_dir):
994
       BzrNewError.__init__(self)
995
       self.limbo_dir = limbo_dir
996
997
998
class ImmortalLimbo(BzrNewError):
999
    """Unable to delete transform temporary directory $(limbo_dir)s.
1000
    Please examine %(limbo_dir)s to see if it contains any files you wish to
1001
    keep, and delete it when you are done.
1002
    """
1003
    def __init__(self, limbo_dir):
1004
       BzrNewError.__init__(self)
1005
       self.limbo_dir = limbo_dir
1534.7.163 by Aaron Bentley
Merge from Robert [Fails tests]
1006
1007
1508.1.22 by Robert Collins
implement out of date working tree checks in commit.
1008
class OutOfDateTree(BzrNewError):
1009
    """Working tree is out of date, please run 'bzr update'."""
1508.1.25 by Robert Collins
Update per review comments.
1010
1011
    def __init__(self, tree):
1012
        BzrNewError.__init__(self)
1013
        self.tree = tree
1534.7.196 by Aaron Bentley
Switched to Rio format for merge-modified list
1014
1563.2.22 by Robert Collins
Move responsibility for repository.has_revision into RevisionStore
1015
1534.7.196 by Aaron Bentley
Switched to Rio format for merge-modified list
1016
class MergeModifiedFormatError(BzrNewError):
1017
    """Error in merge modified format"""
1534.7.200 by Aaron Bentley
Merge from mainline
1018
1019
1534.10.7 by Aaron Bentley
Added tests for bad conflict lists
1020
class ConflictFormatError(BzrNewError):
1021
    """Format error in conflict listings"""
1022
1023
1570.1.13 by Robert Collins
Check for incorrect revision parentage in the weave during revision access.
1024
class CorruptRepository(BzrNewError):
1025
    """An error has been detected in the repository %(repo_path)s.
1026
Please run bzr reconcile on this repository."""
1027
1028
    def __init__(self, repo):
1029
        BzrNewError.__init__(self)
1030
        self.repo_path = repo.bzrdir.root_transport.base
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
1031
1032
1033
class UpgradeRequired(BzrNewError):
1034
    """To use this feature you must upgrade your branch at %(path)s."""
1035
1036
    def __init__(self, path):
1037
        BzrNewError.__init__(self)
1038
        self.path = path
1039
1587.1.8 by Robert Collins
Local commits on unbound branches fail.
1040
1041
class LocalRequiresBoundBranch(BzrNewError):
1042
    """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.
1043
1044
1045
class MissingProgressBarFinish(BzrNewError):
1046
    """A nested progress bar was not 'finished' correctly."""
1534.10.8 by Aaron Bentley
Implemented conflict_lines in terms of old system on WorkingTree
1047
1048
1843.3.7 by John Arbash Meinel
new env var 'BZR_PROGRESS_BAR' to select the exact progress type
1049
class InvalidProgressBarType(BzrNewError):
1050
    """Environment variable BZR_PROGRESS_BAR='%(bar_type)s is not a supported type
1051
Select one of: %(valid_types)s"""
1052
1053
    def __init__(self, bar_type, valid_types):
1054
        BzrNewError.__init__(self, bar_type=bar_type, valid_types=valid_types)
1055
1056
1534.10.8 by Aaron Bentley
Implemented conflict_lines in terms of old system on WorkingTree
1057
class UnsupportedOperation(BzrNewError):
1058
    """The method %(mname)s is not supported on objects of type %(tname)s."""
1059
    def __init__(self, method, method_self):
1060
        self.method = method
1061
        self.mname = method.__name__
1062
        self.tname = type(method_self).__name__
1558.15.1 by Aaron Bentley
Add text_file function
1063
1064
1065
class BinaryFile(BzrNewError):
1066
    """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)
1067
1068
1069
class IllegalPath(BzrNewError):
1070
    """The path %(path)s is not permitted on this platform"""
1071
1072
    def __init__(self, path):
1073
        BzrNewError.__init__(self)
1074
        self.path = path
1185.82.118 by Aaron Bentley
Ensure that StrictTestament handles execute bit differences
1075
1076
1077
class TestamentMismatch(BzrNewError):
1078
    """Testament did not match expected value.  
1079
       For revision_id {%(revision_id)s}, expected {%(expected)s}, measured 
1080
       {%(measured)s}
1081
    """
1082
    def __init__(self, revision_id, expected, measured):
1083
        self.revision_id = revision_id
1084
        self.expected = expected
1085
        self.measured = measured
1185.82.131 by Aaron Bentley
Move BadBundle error (and subclasses) to errors.py
1086
1087
1185.82.139 by Aaron Bentley
Raise NotABundle when a non-bundle is supplied
1088
class NotABundle(BzrNewError):
1089
    """Not a bzr revision-bundle: %(text)r"""
1185.82.142 by Aaron Bentley
Update for review comments
1090
1185.82.139 by Aaron Bentley
Raise NotABundle when a non-bundle is supplied
1091
    def __init__(self, text):
1907.2.1 by Hermann Kraus
Convert bundle errors from Exception to BzrNewError.
1092
        BzrNewError.__init__(self)
1093
        self.text = text
1094
1095
1096
class BadBundle(BzrNewError): 
1097
    """Bad bzr revision-bundle: %(text)r"""
1098
1099
    def __init__(self, text):
1100
        BzrNewError.__init__(self)
1101
        self.text = text
1102
1103
1104
class MalformedHeader(BadBundle): 
1105
    """Malformed bzr revision-bundle header: %(text)r"""
1106
1107
    def __init__(self, text):
1108
        BzrNewError.__init__(self)
1109
        self.text = text
1110
1111
1112
class MalformedPatches(BadBundle): 
1113
    """Malformed patches in bzr revision-bundle: %(text)r"""
1114
1115
    def __init__(self, text):
1116
        BzrNewError.__init__(self)
1117
        self.text = text
1118
1119
1120
class MalformedFooter(BadBundle): 
1121
    """Malformed footer in bzr revision-bundle: %(text)r"""
1122
1123
    def __init__(self, text):
1124
        BzrNewError.__init__(self)
1907.2.2 by Hermann Kraus
Detect wrong eol markers.
1125
        self.text = text
1126
1127
class UnsupportedEOLMarker(BadBundle):
1128
    """End of line marker was not \\n in bzr revision-bundle"""    
1129
1130
    def __init__(self):
1131
        BzrNewError.__init__(self)