/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
1 by mbp at sourcefrog
import from baz patch-364
2
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
1185.16.61 by mbp at sourcefrog
- start introducing hct error classes
17
"""Exceptions for bzr, and reporting of them.
18
19
Exceptions are caught at a high level to report errors to the user, and
20
might also be caught inside the program.  Therefore it needs to be
21
possible to convert them to a meaningful string, and also for them to be
22
interrogated by the program.
23
24
Exceptions are defined such that the arguments given to the constructor
25
are stored in the object as properties of the same name.  When the
26
object is printed as a string, the doc string of the class is used as
27
a format string with the property dictionary available to it.
28
29
This means that exceptions can used like this:
30
31
>>> import sys
32
>>> try:
33
...   raise NotBranchError(path='/foo/bar')
34
... except:
35
...   print sys.exc_type
36
...   print sys.exc_value
1185.50.38 by John Arbash Meinel
Changed exception traceback route to not use hasattr, which generates its own exception.
37
...   path = getattr(sys.exc_value, 'path')
38
...   if path is not None:
39
...     print path
1185.16.61 by mbp at sourcefrog
- start introducing hct error classes
40
bzrlib.errors.NotBranchError
41
Not a branch: /foo/bar
42
/foo/bar
43
44
Therefore:
45
46
 * create a new exception class for any class of error that can be
47
   usefully distinguished.
48
49
 * the printable form of an exception is generated by the base class
50
   __str__ method
1185.33.7 by Martin Pool
Better formatting of builtin errors
51
52
Exception strings should start with a capital letter and not have a final
53
fullstop.
1185.16.61 by mbp at sourcefrog
- start introducing hct error classes
54
"""
55
1614.2.13 by Olaf Conradi
Re-added AmbiguousBase with a deprecated warning.
56
from warnings import warn
57
1185.16.61 by mbp at sourcefrog
- start introducing hct error classes
58
# based on Scott James Remnant's hct error classes
59
1185.16.62 by mbp at sourcefrog
- convert NotBranchError to new exception base
60
# TODO: is there any value in providing the .args field used by standard
61
# python exceptions?   A list of values with no names seems less useful 
62
# to me.
63
1185.16.63 by Martin Pool
- more error conversion
64
# TODO: Perhaps convert the exception to a string at the moment it's 
65
# constructed to make sure it will succeed.  But that says nothing about
66
# exceptions that are never raised.
67
68
# TODO: Convert all the other error classes here to BzrNewError, and eliminate
69
# the old one.
1185.16.62 by mbp at sourcefrog
- convert NotBranchError to new exception base
70
1662.1.12 by Martin Pool
Translate unknown sftp errors to PathError, no NoSuchFile
71
# TODO: The pattern (from hct) of using classes docstrings as message
72
# templates is cute but maybe not such a great idea - perhaps should have a
73
# separate static message_template.
74
1185.16.61 by mbp at sourcefrog
- start introducing hct error classes
75
1 by mbp at sourcefrog
import from baz patch-364
76
class BzrError(StandardError):
1685.2.1 by Brian M. Carlson
Add a workaround for usage of the args attribute in exceptions.
77
    def __init__(self, *args):
78
        if not hasattr(self, 'args'):
79
            self.args = args
80
1193 by Martin Pool
- better string formatting of BzrErrors with explanation
81
    def __str__(self):
1393.1.64 by Martin Pool
- improved display of some errors, including NotBranchError
82
        # XXX: Should we show the exception class in 
83
        # exceptions that don't provide their own message?  
84
        # maybe it should be done at a higher level
85
        ## n = self.__class__.__name__ + ': '
86
        n = ''
1195 by Martin Pool
- better error display
87
        if len(self.args) == 1:
1449 by Robert Collins
teach check about ghosts
88
            return str(self.args[0])
1195 by Martin Pool
- better error display
89
        elif len(self.args) == 2:
1193 by Martin Pool
- better string formatting of BzrErrors with explanation
90
            # 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
91
            try:
1393.1.64 by Martin Pool
- improved display of some errors, including NotBranchError
92
                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
93
            except TypeError:
1393.1.64 by Martin Pool
- improved display of some errors, including NotBranchError
94
                return n + "%r" % self
1193 by Martin Pool
- better string formatting of BzrErrors with explanation
95
        else:
1393.1.64 by Martin Pool
- improved display of some errors, including NotBranchError
96
            return n + `self.args`
1193 by Martin Pool
- better string formatting of BzrErrors with explanation
97
1185.1.14 by Robert Collins
remove more duplicate merged hunks. Bad MERGE3, BAD.
98
1185.16.62 by mbp at sourcefrog
- convert NotBranchError to new exception base
99
class BzrNewError(BzrError):
1185.16.61 by mbp at sourcefrog
- start introducing hct error classes
100
    """bzr error"""
101
    # base classes should override the docstring with their human-
102
    # readable explanation
103
1685.2.1 by Brian M. Carlson
Add a workaround for usage of the args attribute in exceptions.
104
    def __init__(self, *args, **kwds):
105
        # XXX: Use the underlying BzrError to always generate the args attribute
106
        # if it doesn't exist. --bmc, 20060426
107
        super(BzrError, self).__init__(*args)
1185.16.61 by mbp at sourcefrog
- start introducing hct error classes
108
        for key, value in kwds.items():
109
            setattr(self, key, value)
110
111
    def __str__(self):
112
        try:
113
            return self.__doc__ % self.__dict__
114
        except (NameError, ValueError, KeyError), e:
115
            return 'Unprintable exception %s: %s' \
116
                % (self.__class__.__name__, str(e))
117
118
1185.16.63 by Martin Pool
- more error conversion
119
class BzrCheckError(BzrNewError):
120
    """Internal check failed: %(message)s"""
1508.1.22 by Robert Collins
implement out of date working tree checks in commit.
121
1185.16.63 by Martin Pool
- more error conversion
122
    def __init__(self, message):
1185.16.103 by mbp at sourcefrog
Fix up all calls to InvalidRevisionId() to specify parameters.
123
        BzrNewError.__init__(self)
1185.16.63 by Martin Pool
- more error conversion
124
        self.message = message
125
126
127
class InvalidEntryName(BzrNewError):
128
    """Invalid entry name: %(name)s"""
129
    def __init__(self, name):
1185.16.103 by mbp at sourcefrog
Fix up all calls to InvalidRevisionId() to specify parameters.
130
        BzrNewError.__init__(self)
1185.16.63 by Martin Pool
- more error conversion
131
        self.name = name
132
133
134
class InvalidRevisionNumber(BzrNewError):
135
    """Invalid revision number %(revno)d"""
136
    def __init__(self, revno):
1185.16.103 by mbp at sourcefrog
Fix up all calls to InvalidRevisionId() to specify parameters.
137
        BzrNewError.__init__(self)
1185.16.63 by Martin Pool
- more error conversion
138
        self.revno = revno
139
140
141
class InvalidRevisionId(BzrNewError):
1185.16.103 by mbp at sourcefrog
Fix up all calls to InvalidRevisionId() to specify parameters.
142
    """Invalid revision-id {%(revision_id)s} in %(branch)s"""
143
    def __init__(self, revision_id, branch):
144
        BzrNewError.__init__(self)
1185.12.90 by Aaron Bentley
Fixed InvalidRevisionID handling in Branch.get_revision_xml
145
        self.revision_id = revision_id
1185.16.103 by mbp at sourcefrog
Fix up all calls to InvalidRevisionId() to specify parameters.
146
        self.branch = branch
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
147
148
1497 by Robert Collins
Move Branch.read_working_inventory to WorkingTree.
149
class NoWorkingTree(BzrNewError):
1662.1.6 by Martin Pool
Fix formatting of NoWorkingTree and NotLocalUrl exceptions
150
    """No WorkingTree exists for %(base)s."""
1497 by Robert Collins
Move Branch.read_working_inventory to WorkingTree.
151
    
152
    def __init__(self, base):
153
        BzrNewError.__init__(self)
154
        self.base = base
1506 by Robert Collins
Merge Johns current integration work.
155
156
1534.4.42 by Robert Collins
add working tree to the BzrDir facilities.
157
class NotLocalUrl(BzrNewError):
1662.1.6 by Martin Pool
Fix formatting of NoWorkingTree and NotLocalUrl exceptions
158
    """%(url)s is not a local path."""
1534.4.42 by Robert Collins
add working tree to the BzrDir facilities.
159
    
160
    def __init__(self, url):
161
        BzrNewError.__init__(self)
162
        self.url = url
163
164
329 by Martin Pool
- refactor command functions into command classes
165
class BzrCommandError(BzrError):
166
    # Error from malformed user command
1495 by Robert Collins
Add a --create-prefix to the new push command.
167
    # This is being misused as a generic exception
168
    # pleae subclass. RBC 20051030
1185.54.18 by Aaron Bentley
Noted difference of opinion wrt BzrCommandError
169
    #
170
    # I think it's a waste of effort to differentiate between errors that
171
    # are not intended to be caught anyway.  UI code need not subclass
172
    # BzrCommandError, and non-UI code should not throw a subclass of
173
    # BzrCommandError.  ADHB 20051211
1393.1.64 by Martin Pool
- improved display of some errors, including NotBranchError
174
    def __str__(self):
175
        return self.args[0]
1 by mbp at sourcefrog
import from baz patch-364
176
1495 by Robert Collins
Add a --create-prefix to the new push command.
177
178
class BzrOptionError(BzrCommandError):
179
    """Some missing or otherwise incorrect option was supplied."""
180
181
    
1185.16.65 by mbp at sourcefrog
- new commit --strict option
182
class StrictCommitFailed(Exception):
183
    """Commit refused because there are unknowns in the tree."""
1 by mbp at sourcefrog
import from baz patch-364
184
1185.31.41 by John Arbash Meinel
Creating a PathNotChild exception, and using relpath in HTTPTestUtil
185
1662.1.12 by Martin Pool
Translate unknown sftp errors to PathError, no NoSuchFile
186
# XXX: Should be unified with TransportError; they seem to represent the
187
# same thing
1185.31.44 by John Arbash Meinel
Cleaned up Exceptions for all transports.
188
class PathError(BzrNewError):
189
    """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.
190
1185.31.44 by John Arbash Meinel
Cleaned up Exceptions for all transports.
191
    def __init__(self, path, extra=None):
192
        BzrNewError.__init__(self)
193
        self.path = path
194
        if extra:
195
            self.extra = ': ' + str(extra)
196
        else:
197
            self.extra = ''
198
199
200
class NoSuchFile(PathError):
201
    """No such file: %(path)r%(extra)s"""
202
203
204
class FileExists(PathError):
205
    """File exists: %(path)r%(extra)s"""
206
207
1553.5.10 by Martin Pool
New DirectoryNotEmpty exception, and raise this from local and memory
208
class DirectoryNotEmpty(PathError):
209
    """Directory not empty: %(path)r%(extra)s"""
210
211
1558.10.1 by Aaron Bentley
Handle lockdirs over NFS properly
212
class ResourceBusy(PathError):
213
    """Device or resource busy: %(path)r%(extra)s"""
214
215
1185.31.44 by John Arbash Meinel
Cleaned up Exceptions for all transports.
216
class PermissionDenied(PathError):
217
    """Permission denied: %(path)r%(extra)s"""
218
219
1185.31.41 by John Arbash Meinel
Creating a PathNotChild exception, and using relpath in HTTPTestUtil
220
class PathNotChild(BzrNewError):
1185.31.44 by John Arbash Meinel
Cleaned up Exceptions for all transports.
221
    """Path %(path)r is not a child of path %(base)r%(extra)s"""
222
    def __init__(self, path, base, extra=None):
1185.31.41 by John Arbash Meinel
Creating a PathNotChild exception, and using relpath in HTTPTestUtil
223
        BzrNewError.__init__(self)
224
        self.path = path
225
        self.base = base
1185.31.44 by John Arbash Meinel
Cleaned up Exceptions for all transports.
226
        if extra:
227
            self.extra = ': ' + str(extra)
228
        else:
229
            self.extra = ''
1185.31.41 by John Arbash Meinel
Creating a PathNotChild exception, and using relpath in HTTPTestUtil
230
231
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
232
class NotBranchError(PathError):
1185.16.62 by mbp at sourcefrog
- convert NotBranchError to new exception base
233
    """Not a branch: %(path)s"""
1654.1.4 by Robert Collins
Teach `bzr init` how to init at the root of a repository.
234
235
236
class AlreadyBranchError(PathError):
1662.1.19 by Martin Pool
Better error message when initting existing tree
237
    """Already a branch: %(path)s."""
238
239
240
class BranchExistsWithoutWorkingTree(PathError):
241
    """Directory contains a branch, but no working tree \
242
(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
243
573 by Martin Pool
- new exception NotBranchError
244
1534.4.47 by Robert Collins
Split out repository into .bzr/repository
245
class NoRepositoryPresent(BzrNewError):
246
    """Not repository present: %(path)r"""
247
    def __init__(self, bzrdir):
248
        BzrNewError.__init__(self)
249
        self.path = bzrdir.transport.clone('..').base
250
251
1185.35.32 by Aaron Bentley
Fixed handling of files in mixed branches
252
class FileInWrongBranch(BzrNewError):
253
    """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.
254
1185.35.32 by Aaron Bentley
Fixed handling of files in mixed branches
255
    def __init__(self, branch, path):
256
        BzrNewError.__init__(self)
257
        self.branch = branch
258
        self.branch_base = branch.base
259
        self.path = path
260
261
1185.1.53 by Robert Collins
raise a specific error on unsupported branches so that they can be distinguished from generic errors
262
class UnsupportedFormatError(BzrError):
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.
263
    """Specified path is a bzr branch that we recognize but cannot read."""
1185.1.53 by Robert Collins
raise a specific error on unsupported branches so that they can be distinguished from generic errors
264
    def __str__(self):
265
        return 'unsupported branch format: %s' % self.args[0]
266
267
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.
268
class UnknownFormatError(BzrError):
269
    """Specified path is a bzr branch whose format we do not recognize."""
270
    def __str__(self):
271
        return 'unknown branch format: %s' % self.args[0]
272
273
1534.4.44 by Robert Collins
Make a new BzrDir format that uses a versioned branch format in a branch/ subdirectory.
274
class IncompatibleFormat(BzrNewError):
275
    """Format %(format)s is not compatible with .bzr version %(bzrdir)s."""
276
277
    def __init__(self, format, bzrdir_format):
278
        BzrNewError.__init__(self)
279
        self.format = format
280
        self.bzrdir = bzrdir_format
281
282
1185.16.72 by Martin Pool
[merge] from robert and fix up tests
283
class NotVersionedError(BzrNewError):
284
    """%(path)s is not versioned"""
285
    def __init__(self, path):
286
        BzrNewError.__init__(self)
287
        self.path = path
753 by Martin Pool
- new exception NotVersionedError
288
289
1658.1.9 by Martin Pool
Give an error for bzr diff on an nonexistent file (Malone #3619)
290
class PathsNotVersionedError(BzrNewError):
291
    # used when reporting several paths are not versioned
292
    """Path(s) are not versioned: %(paths_as_string)s"""
293
294
    def __init__(self, paths):
295
        from bzrlib.osutils import quotefn
296
        BzrNewError.__init__(self)
297
        self.paths = paths
298
        self.paths_as_string = ' '.join([quotefn(p) for p in paths])
299
300
1662.1.9 by Martin Pool
Give a clear error for bzr status of an unversioned, nonexistent file. (Malone #3619)
301
class PathsDoNotExist(BzrNewError):
1662.1.14 by Martin Pool
(PathsDoNotExist) review style comments
302
    """Path(s) do not exist: %(paths_as_string)s"""
303
1662.1.9 by Martin Pool
Give a clear error for bzr status of an unversioned, nonexistent file. (Malone #3619)
304
    # used when reporting that paths are neither versioned nor in the working
305
    # tree
306
307
    def __init__(self, paths):
1662.1.14 by Martin Pool
(PathsDoNotExist) review style comments
308
        # circular import
1662.1.9 by Martin Pool
Give a clear error for bzr status of an unversioned, nonexistent file. (Malone #3619)
309
        from bzrlib.osutils import quotefn
310
        BzrNewError.__init__(self)
311
        self.paths = paths
312
        self.paths_as_string = ' '.join([quotefn(p) for p in paths])
313
314
599 by Martin Pool
- better error reporting from smart_add
315
class BadFileKindError(BzrError):
316
    """Specified file is of a kind that cannot be added.
317
318
    (For example a symlink or device file.)"""
319
320
321
class ForbiddenFileError(BzrError):
322
    """Cannot operate on a file because it is a control file."""
323
324
1553.5.11 by Martin Pool
Change some lock and transaction related exceptions to BzrNewException style
325
class LockError(BzrNewError):
326
    """Lock error: %(message)s"""
1185.16.63 by Martin Pool
- more error conversion
327
    # All exceptions from the lock/unlock functions should be from
328
    # this exception class.  They will be translated as necessary. The
329
    # original exception is available as e.original_error
1553.5.11 by Martin Pool
Change some lock and transaction related exceptions to BzrNewException style
330
    #
331
    # New code should prefer to raise specific subclasses
332
    def __init__(self, message):
333
        self.message = message
882 by Martin Pool
- Optionally raise EmptyCommit if there are no changes. Test for this.
334
335
1417.1.6 by Robert Collins
introduce transactions for grouping actions done to and with branches
336
class CommitNotPossible(LockError):
337
    """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
338
    def __init__(self):
339
        pass
1417.1.6 by Robert Collins
introduce transactions for grouping actions done to and with branches
340
341
342
class AlreadyCommitted(LockError):
343
    """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
344
    def __init__(self):
345
        pass
1417.1.6 by Robert Collins
introduce transactions for grouping actions done to and with branches
346
347
1417.1.8 by Robert Collins
use transactions in the weave store interface, which enables caching for log
348
class ReadOnlyError(LockError):
1553.5.33 by Martin Pool
LockDir review comment fixes
349
    """A write attempt was made in a read only transaction on %(obj)s"""
350
    def __init__(self, obj):
351
        self.obj = obj
1553.5.11 by Martin Pool
Change some lock and transaction related exceptions to BzrNewException style
352
353
1594.2.21 by Robert Collins
Teach versioned files to prevent mutation after finishing.
354
class OutSideTransaction(BzrNewError):
355
    """A transaction related operation was attempted after the transaction finished."""
356
357
1553.5.36 by Martin Pool
Clean up duplicate BranchNotLocked error and rename to ObjectNotLocked
358
class ObjectNotLocked(LockError):
359
    """%(obj)r is not locked"""
360
    # this can indicate that any particular object is not locked; see also
361
    # LockNotHeld which means that a particular *lock* object is not held by
362
    # the caller -- perhaps they should be unified.
363
    def __init__(self, obj):
364
        self.obj = obj
1553.5.11 by Martin Pool
Change some lock and transaction related exceptions to BzrNewException style
365
366
367
class ReadOnlyObjectDirtiedError(ReadOnlyError):
368
    """Cannot change object %(obj)r in read only transaction"""
369
    def __init__(self, obj):
370
        self.obj = obj
371
372
373
class UnlockableTransport(LockError):
374
    """Cannot lock: transport is read only: %(transport)s"""
375
    def __init__(self, transport):
376
        self.transport = transport
377
378
379
class LockContention(LockError):
380
    """Could not acquire lock %(lock)s"""
381
    # TODO: show full url for lock, combining the transport and relative bits?
382
    def __init__(self, lock):
383
        self.lock = lock
384
385
1553.5.23 by Martin Pool
Start LockDir.confirm method and LockBroken exception
386
class LockBroken(LockError):
1553.5.24 by Martin Pool
Warning to check storage when lock was broken
387
    """Lock was broken while still open: %(lock)s - check storage consistency!"""
1553.5.23 by Martin Pool
Start LockDir.confirm method and LockBroken exception
388
    def __init__(self, lock):
389
        self.lock = lock
390
391
1553.5.27 by Martin Pool
Confirm that only the intended holder of a lock was broken.
392
class LockBreakMismatch(LockError):
393
    """Lock was released and re-acquired before being broken: %(lock)s: held by %(holder)r, wanted to break %(target)r"""
394
    def __init__(self, lock, holder, target):
395
        self.lock = lock
396
        self.holder = holder
397
        self.target = target
398
399
1553.5.11 by Martin Pool
Change some lock and transaction related exceptions to BzrNewException style
400
class LockNotHeld(LockError):
401
    """Lock not held: %(lock)s"""
402
    def __init__(self, lock):
403
        self.lock = lock
404
405
1185.16.63 by Martin Pool
- more error conversion
406
class PointlessCommit(BzrNewError):
1185.16.64 by Martin Pool
- more error conversions
407
    """No changes to commit"""
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
408
1551.3.1 by Aaron Bentley
PEP8 fixes
409
1534.4.13 by Robert Collins
Give a reasonable warning on attempts to upgrade a readonly url.
410
class UpgradeReadonly(BzrNewError):
411
    """Upgrade URL cannot work with readonly URL's."""
412
413
1534.5.7 by Robert Collins
Start factoring out the upgrade policy logic.
414
class UpToDateFormat(BzrNewError):
415
    """The branch format %(format)s is already at the most recent format."""
416
417
    def __init__(self, format):
418
        BzrNewError.__init__(self)
419
        self.format = format
420
421
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
422
1185.22.1 by Michael Ellerman
Implement strict commits with --strict flag.
423
class StrictCommitFailed(Exception):
424
    """Commit refused because there are unknowns in the tree."""
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
425
1505.1.2 by John Arbash Meinel
(broken) working on implementing bound branches.
426
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
427
class NoSuchRevision(BzrError):
428
    def __init__(self, branch, revision):
429
        self.branch = branch
430
        self.revision = revision
431
        msg = "Branch %s has no revision %s" % (branch, revision)
432
        BzrError.__init__(self, msg)
433
1034 by Martin Pool
- merge bzrlib.revision.is_ancestor from aaron
434
1192 by Martin Pool
- clean up code for retrieving stored inventories
435
class HistoryMissing(BzrError):
436
    def __init__(self, branch, object_type, object_id):
437
        self.branch = branch
438
        BzrError.__init__(self,
439
                          '%s is missing %s {%s}'
440
                          % (branch, object_type, object_id))
441
442
1185.2.1 by Lalo Martins
moving DivergedBranches from bzrlib.branch to bzrlib.errors, obeying:
443
class DivergedBranches(BzrError):
1649.1.1 by Robert Collins
* 'pull' and 'push' now normalise the revision history, so that any two
444
1185.2.1 by Lalo Martins
moving DivergedBranches from bzrlib.branch to bzrlib.errors, obeying:
445
    def __init__(self, branch1, branch2):
1185.56.1 by Michael Ellerman
Simplify handling of DivergedBranches in cmd_pull()
446
        BzrError.__init__(self, "These branches have diverged.  Try merge.")
1185.2.1 by Lalo Martins
moving DivergedBranches from bzrlib.branch to bzrlib.errors, obeying:
447
        self.branch1 = branch1
448
        self.branch2 = branch2
449
1390 by Robert Collins
pair programming worx... merge integration and weave
450
1105 by Martin Pool
- expose 'find-merge-base' as a new expert command,
451
class UnrelatedBranches(BzrCommandError):
452
    def __init__(self):
453
        msg = "Branches have no common ancestor, and no base revision"\
454
            " specified."
455
        BzrCommandError.__init__(self, msg)
456
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
457
974.1.80 by Aaron Bentley
Improved merge error handling and testing
458
class NoCommonAncestor(BzrError):
459
    def __init__(self, revision_a, revision_b):
460
        msg = "Revisions have no common ancestor: %s %s." \
461
            % (revision_a, revision_b) 
462
        BzrError.__init__(self, msg)
463
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
464
974.1.80 by Aaron Bentley
Improved merge error handling and testing
465
class NoCommonRoot(BzrError):
466
    def __init__(self, revision_a, revision_b):
467
        msg = "Revisions are not derived from the same root: %s %s." \
468
            % (revision_a, revision_b) 
469
        BzrError.__init__(self, msg)
1105 by Martin Pool
- expose 'find-merge-base' as a new expert command,
470
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
471
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
472
974.2.7 by aaron.bentley at utoronto
Merged from bzr.24
473
class NotAncestor(BzrError):
474
    def __init__(self, rev_id, not_ancestor_id):
1185.1.14 by Robert Collins
remove more duplicate merged hunks. Bad MERGE3, BAD.
475
        msg = "Revision %s is not an ancestor of %s" % (not_ancestor_id, 
476
                                                        rev_id)
477
        BzrError.__init__(self, msg)
478
        self.rev_id = rev_id
479
        self.not_ancestor_id = not_ancestor_id
1185.1.12 by Robert Collins
merge in lsdiff/filterdiff friendliness
480
481
974.1.30 by aaron.bentley at utoronto
Changed copy_multi to permit failure and return a tuple, tested missing required revisions
482
class InstallFailed(BzrError):
483
    def __init__(self, revisions):
1185.1.14 by Robert Collins
remove more duplicate merged hunks. Bad MERGE3, BAD.
484
        msg = "Could not install revisions:\n%s" % " ,".join(revisions)
485
        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
486
        self.revisions = revisions
1154 by Martin Pool
- fix imports for moved errors
487
488
1614.2.13 by Olaf Conradi
Re-added AmbiguousBase with a deprecated warning.
489
class AmbiguousBase(BzrError):
490
    def __init__(self, bases):
491
        warn("BzrError AmbiguousBase has been deprecated as of bzrlib 0.8.",
492
                DeprecationWarning)
493
        msg = "The correct base is unclear, becase %s are all equally close" %\
494
            ", ".join(bases)
495
        BzrError.__init__(self, msg)
496
        self.bases = bases
497
498
974.1.80 by Aaron Bentley
Improved merge error handling and testing
499
class NoCommits(BzrError):
500
    def __init__(self, branch):
501
        msg = "Branch %s has no commits." % branch
502
        BzrError.__init__(self, msg)
1185.10.1 by Aaron Bentley
Added --basis option to bzr branch
503
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
504
1185.10.1 by Aaron Bentley
Added --basis option to bzr branch
505
class UnlistableStore(BzrError):
506
    def __init__(self, store):
507
        BzrError.__init__(self, "Store %s is not listable" % store)
508
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
509
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
510
1185.10.1 by Aaron Bentley
Added --basis option to bzr branch
511
class UnlistableBranch(BzrError):
512
    def __init__(self, br):
513
        BzrError.__init__(self, "Stores for branch %s are not listable" % br)
1392 by Robert Collins
reinstate testfetch test case
514
515
1505.1.24 by John Arbash Meinel
Updated commit to handle bound branches. Included test to handle commit after merge
516
class BoundBranchOutOfDate(BzrNewError):
517
    """Bound branch %(branch)s is out of date with master branch %(master)s."""
518
    def __init__(self, branch, master):
519
        BzrNewError.__init__(self)
520
        self.branch = branch
521
        self.master = master
522
523
        
524
class CommitToDoubleBoundBranch(BzrNewError):
525
    """Cannot commit to branch %(branch)s. It is bound to %(master)s, which is bound to %(remote)s."""
526
    def __init__(self, branch, master, remote):
527
        BzrNewError.__init__(self)
528
        self.branch = branch
529
        self.master = master
530
        self.remote = remote
531
1505.1.25 by John Arbash Meinel
Updated pull. Now all paths which call set_revision_history maintain the branch invariant. All tests pass.
532
533
class OverwriteBoundBranch(BzrNewError):
534
    """Cannot pull --overwrite to a branch which is bound %(branch)s"""
535
    def __init__(self, branch):
536
        BzrNewError.__init__(self)
537
        self.branch = branch
538
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
539
540
class BoundBranchConnectionFailure(BzrNewError):
541
    """Unable to connect to target of bound branch %(branch)s => %(target)s: %(error)s"""
542
    def __init__(self, branch, target, error):
543
        BzrNewError.__init__(self)
544
        self.branch = branch
545
        self.target = target
546
        self.error = error
547
548
1185.16.116 by mbp at sourcefrog
Move weave errors into bzrlib.errors and make consistent with new system.
549
class WeaveError(BzrNewError):
550
    """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.
551
1185.16.116 by mbp at sourcefrog
Move weave errors into bzrlib.errors and make consistent with new system.
552
    def __init__(self, message=None):
553
        BzrNewError.__init__(self)
554
        self.message = message
555
556
557
class WeaveRevisionAlreadyPresent(WeaveError):
558
    """Revision {%(revision_id)s} already present in %(weave)s"""
559
    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.
560
1185.16.116 by mbp at sourcefrog
Move weave errors into bzrlib.errors and make consistent with new system.
561
        WeaveError.__init__(self)
562
        self.revision_id = revision_id
563
        self.weave = weave
564
565
566
class WeaveRevisionNotPresent(WeaveError):
567
    """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.
568
1185.16.116 by mbp at sourcefrog
Move weave errors into bzrlib.errors and make consistent with new system.
569
    def __init__(self, revision_id, weave):
570
        WeaveError.__init__(self)
571
        self.revision_id = revision_id
572
        self.weave = weave
573
574
575
class WeaveFormatError(WeaveError):
576
    """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.
577
1185.16.116 by mbp at sourcefrog
Move weave errors into bzrlib.errors and make consistent with new system.
578
    def __init__(self, what):
579
        WeaveError.__init__(self)
580
        self.what = what
581
582
583
class WeaveParentMismatch(WeaveError):
584
    """Parents are mismatched between two revisions."""
585
    
1393.2.1 by John Arbash Meinel
Merged in split-storage-2 branch. Need to cleanup a little bit more still.
586
1185.50.23 by John Arbash Meinel
Adding sha1 check when weave extracts a text.
587
class WeaveInvalidChecksum(WeaveError):
588
    """Text did not match it's checksum: %(message)s"""
589
590
1551.3.11 by Aaron Bentley
Merge from Robert
591
class WeaveTextDiffers(WeaveError):
592
    """Weaves differ on text content. Revision: {%(revision_id)s}, %(weave_a)s, %(weave_b)s"""
593
594
    def __init__(self, revision_id, weave_a, weave_b):
595
        WeaveError.__init__(self)
596
        self.revision_id = revision_id
597
        self.weave_a = weave_a
598
        self.weave_b = weave_b
599
600
1534.7.158 by Aaron Bentley
Merged John Meinel's integration
601
class WeaveTextDiffers(WeaveError):
602
    """Weaves differ on text content. Revision: {%(revision_id)s}, %(weave_a)s, %(weave_b)s"""
603
604
    def __init__(self, revision_id, weave_a, weave_b):
605
        WeaveError.__init__(self)
606
        self.revision_id = revision_id
607
        self.weave_a = weave_a
608
        self.weave_b = weave_b
609
610
1563.2.1 by Robert Collins
Merge in a variation of the versionedfile api from versioned-file.
611
class VersionedFileError(BzrNewError):
612
    """Versioned file error."""
613
614
615
class RevisionNotPresent(VersionedFileError):
616
    """Revision {%(revision_id)s} not present in %(file_id)s."""
617
618
    def __init__(self, revision_id, file_id):
619
        VersionedFileError.__init__(self)
620
        self.revision_id = revision_id
621
        self.file_id = file_id
622
623
624
class RevisionAlreadyPresent(VersionedFileError):
625
    """Revision {%(revision_id)s} already present in %(file_id)s."""
626
627
    def __init__(self, revision_id, file_id):
628
        VersionedFileError.__init__(self)
629
        self.revision_id = revision_id
630
        self.file_id = file_id
631
632
633
class KnitError(BzrNewError):
634
    """Knit error"""
635
636
637
class KnitHeaderError(KnitError):
638
    """Knit header error: %(badline)r unexpected"""
639
640
    def __init__(self, badline):
641
        KnitError.__init__(self)
642
        self.badline = badline
643
644
645
class KnitCorrupt(KnitError):
646
    """Knit %(filename)s corrupt: %(how)s"""
647
648
    def __init__(self, filename, how):
649
        KnitError.__init__(self)
650
        self.filename = filename
651
        self.how = how
652
653
1185.31.12 by John Arbash Meinel
Refactored the export code to make it easier to add new export formats.
654
class NoSuchExportFormat(BzrNewError):
655
    """Export format %(format)r not supported"""
656
    def __init__(self, format):
657
        BzrNewError.__init__(self)
658
        self.format = format
659
660
1185.11.9 by John Arbash Meinel
Most tests pass, some problems with unavailable socket recv
661
class TransportError(BzrError):
662
    """All errors thrown by Transport implementations should derive
663
    from this class.
664
    """
665
    def __init__(self, msg=None, orig_error=None):
666
        if msg is None and orig_error is not None:
667
            msg = str(orig_error)
668
        BzrError.__init__(self, msg)
669
        self.msg = msg
670
        self.orig_error = orig_error
671
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
672
1185.11.9 by John Arbash Meinel
Most tests pass, some problems with unavailable socket recv
673
# A set of semi-meaningful errors which can be thrown
674
class TransportNotPossible(TransportError):
675
    """This is for transports where a specific function is explicitly not
676
    possible. Such as pushing files to an HTTP server.
677
    """
678
    pass
679
1185.31.44 by John Arbash Meinel
Cleaned up Exceptions for all transports.
680
681
class ConnectionError(TransportError):
682
    """A connection problem prevents file retrieval.
1185.35.31 by Aaron Bentley
Throw ConnectionError instead of NoSuchFile except when we get a 404
683
    This does not indicate whether the file exists or not; it indicates that a
684
    precondition for requesting the file was not met.
685
    """
1185.31.44 by John Arbash Meinel
Cleaned up Exceptions for all transports.
686
    def __init__(self, msg=None, orig_error=None):
687
        TransportError.__init__(self, msg=msg, orig_error=orig_error)
688
1185.11.9 by John Arbash Meinel
Most tests pass, some problems with unavailable socket recv
689
690
class ConnectionReset(TransportError):
691
    """The connection has been closed."""
692
    pass
693
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
694
1185.14.10 by Aaron Bentley
Commit aborts with conflicts in the tree.
695
class ConflictsInTree(BzrError):
696
    def __init__(self):
697
        BzrError.__init__(self, "Working tree has conflicts.")
1185.12.49 by Aaron Bentley
Switched to ConfigObj
698
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
699
1185.12.49 by Aaron Bentley
Switched to ConfigObj
700
class ParseConfigError(BzrError):
701
    def __init__(self, errors, filename):
702
        if filename is None:
703
            filename = ""
704
        message = "Error(s) parsing config file %s:\n%s" % \
705
            (filename, ('\n'.join(e.message for e in errors)))
706
        BzrError.__init__(self, message)
1185.12.52 by Aaron Bentley
Merged more config stuff from Robert
707
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
708
1442.1.58 by Robert Collins
gpg signing of content
709
class SigningFailed(BzrError):
710
    def __init__(self, command_line):
711
        BzrError.__init__(self, "Failed to gpg sign data with command '%s'"
712
                               % command_line)
1185.12.83 by Aaron Bentley
Preliminary weave merge support
713
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
714
1185.12.83 by Aaron Bentley
Preliminary weave merge support
715
class WorkingTreeNotRevision(BzrError):
716
    def __init__(self, tree):
717
        BzrError.__init__(self, "The working tree for %s has changed since"
718
                          " last commit, but weave merge requires that it be"
719
                          " unchanged." % tree.basedir)
1185.12.104 by Aaron Bentley
Merged Martin's latest
720
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
721
1185.24.1 by Aaron Bentley
Got reprocessing working
722
class CantReprocessAndShowBase(BzrNewError):
723
    """Can't reprocess and show base.
724
Reprocessing obscures relationship of conflicting lines to base."""
1185.24.2 by Aaron Bentley
Merge from mainline
725
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
726
1185.16.114 by mbp at sourcefrog
Improved topological sort
727
class GraphCycleError(BzrNewError):
728
    """Cycle in graph %(graph)r"""
729
    def __init__(self, graph):
730
        BzrNewError.__init__(self)
731
        self.graph = graph
1185.35.1 by Aaron Bentley
Implemented conflicts.restore
732
1505.1.23 by John Arbash Meinel
Whitespace cleanup of bzrlib.errors
733
1185.35.1 by Aaron Bentley
Implemented conflicts.restore
734
class NotConflicted(BzrNewError):
1185.35.4 by Aaron Bentley
Implemented remerge
735
    """File %(filename)s is not conflicted."""
1534.3.1 by Robert Collins
* bzrlib.osutils.safe_unicode now exists to provide parameter coercion
736
1185.35.1 by Aaron Bentley
Implemented conflicts.restore
737
    def __init__(self, filename):
738
        BzrNewError.__init__(self)
739
        self.filename = filename
1185.35.13 by Aaron Bentley
Merged Martin
740
1505.1.23 by John Arbash Meinel
Whitespace cleanup of bzrlib.errors
741
1492 by Robert Collins
Support decoration of commands.
742
class MustUseDecorated(Exception):
743
    """A decorating function has requested its original command be used.
744
    
745
    This should never escape bzr, so does not need to be printable.
746
    """
747
1505.1.23 by John Arbash Meinel
Whitespace cleanup of bzrlib.errors
748
1185.35.42 by Aaron Bentley
Fixed fetch to be safer wrt ghosts and corrupt branches
749
class MissingText(BzrNewError):
750
    """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
751
1185.35.42 by Aaron Bentley
Fixed fetch to be safer wrt ghosts and corrupt branches
752
    def __init__(self, branch, text_revision, file_id):
1534.3.1 by Robert Collins
* bzrlib.osutils.safe_unicode now exists to provide parameter coercion
753
        BzrNewError.__init__(self)
1185.35.42 by Aaron Bentley
Fixed fetch to be safer wrt ghosts and corrupt branches
754
        self.branch = branch
755
        self.base = branch.base
756
        self.text_revision = text_revision
757
        self.file_id = file_id
1534.7.5 by Aaron Bentley
Got unique_add under test
758
1505.1.23 by John Arbash Meinel
Whitespace cleanup of bzrlib.errors
759
1534.7.5 by Aaron Bentley
Got unique_add under test
760
class DuplicateKey(BzrNewError):
761
    """Key %(key)s is already present in map"""
1534.7.6 by Aaron Bentley
Added conflict handling
762
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
763
1534.7.6 by Aaron Bentley
Added conflict handling
764
class MalformedTransform(BzrNewError):
1534.7.49 by Aaron Bentley
Printed conflicts in MalformedTransform
765
    """Tree transform is malformed %(conflicts)r"""
1534.7.24 by Aaron Bentley
Merge from the mainline
766
1534.3.1 by Robert Collins
* bzrlib.osutils.safe_unicode now exists to provide parameter coercion
767
768
class BzrBadParameter(BzrNewError):
1185.65.29 by Robert Collins
Implement final review suggestions.
769
    """A bad parameter : %(param)s is not usable.
1534.3.1 by Robert Collins
* bzrlib.osutils.safe_unicode now exists to provide parameter coercion
770
    
1185.65.29 by Robert Collins
Implement final review suggestions.
771
    This exception should never be thrown, but it is a base class for all
772
    parameter-to-function errors.
773
    """
1534.3.1 by Robert Collins
* bzrlib.osutils.safe_unicode now exists to provide parameter coercion
774
    def __init__(self, param):
775
        BzrNewError.__init__(self)
776
        self.param = param
1534.7.32 by Aaron Bentley
Got conflict handling working when conflicts involve existing files
777
1534.4.3 by Robert Collins
Implement BranchTestProviderAdapter, so tests now run across all branch formats.
778
1185.65.29 by Robert Collins
Implement final review suggestions.
779
class BzrBadParameterNotUnicode(BzrBadParameter):
780
    """Parameter %(param)s is neither unicode nor utf8."""
1534.7.120 by Aaron Bentley
PEP8 fixes
781
782
1534.7.32 by Aaron Bentley
Got conflict handling working when conflicts involve existing files
783
class ReusingTransform(BzrNewError):
784
    """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
785
1534.7.120 by Aaron Bentley
PEP8 fixes
786
1534.7.66 by Aaron Bentley
Ensured we don't accidentally move the root directory
787
class CantMoveRoot(BzrNewError):
788
    """Moving the root directory is not supported at this time"""
1185.65.29 by Robert Collins
Implement final review suggestions.
789
1534.7.120 by Aaron Bentley
PEP8 fixes
790
1185.65.29 by Robert Collins
Implement final review suggestions.
791
class BzrBadParameterNotString(BzrBadParameter):
792
    """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.
793
794
1534.4.44 by Robert Collins
Make a new BzrDir format that uses a versioned branch format in a branch/ subdirectory.
795
class BzrBadParameterMissing(BzrBadParameter):
796
    """Parameter $(param)s is required but not present."""
797
798
1666.1.6 by Robert Collins
Make knit the default format.
799
class BzrBadParameterUnicode(BzrBadParameter):
1666.1.9 by Robert Collins
Mark knits as no longer experimental.
800
    """Parameter %(param)s is unicode but only byte-strings are permitted."""
1666.1.6 by Robert Collins
Make knit the default format.
801
802
803
class BzrBadParameterContainsNewline(BzrBadParameter):
1666.1.9 by Robert Collins
Mark knits as no longer experimental.
804
    """Parameter %(param)s contains a newline."""
1666.1.6 by Robert Collins
Make knit the default format.
805
806
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.
807
class DependencyNotPresent(BzrNewError):
1540.3.7 by Martin Pool
Prepare to select a transport depending on what dependencies can be satisfied.
808
    """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.
809
810
    def __init__(self, library, error):
811
        BzrNewError.__init__(self, library=library, error=error)
812
813
814
class ParamikoNotPresent(DependencyNotPresent):
815
    """Unable to import paramiko (required for sftp support): %(error)s"""
816
817
    def __init__(self, error):
818
        DependencyNotPresent.__init__(self, 'paramiko', error)
819
820
1534.4.3 by Robert Collins
Implement BranchTestProviderAdapter, so tests now run across all branch formats.
821
class UninitializableFormat(BzrNewError):
822
    """Format %(format)s cannot be initialised by this version of bzr."""
823
824
    def __init__(self, format):
825
        BzrNewError.__init__(self)
826
        self.format = format
1551.3.4 by Aaron Bentley
Implemented default command options
827
1534.7.156 by Aaron Bentley
PEP8 fixes
828
1534.7.130 by Aaron Bentley
More conflict handling, test porting
829
class NoDiff3(BzrNewError):
830
    """Diff3 is not installed on this machine."""
1534.7.162 by Aaron Bentley
Handle failures creating/deleting the Limbo directory
831
832
833
class ExistingLimbo(BzrNewError):
834
    """This tree contains left-over files from a failed operation.
835
    Please examine %(limbo_dir)s to see if it contains any files you wish to
836
    keep, and delete it when you are done.
837
    """
838
    def __init__(self, limbo_dir):
839
       BzrNewError.__init__(self)
840
       self.limbo_dir = limbo_dir
841
842
843
class ImmortalLimbo(BzrNewError):
844
    """Unable to delete transform temporary directory $(limbo_dir)s.
845
    Please examine %(limbo_dir)s to see if it contains any files you wish to
846
    keep, and delete it when you are done.
847
    """
848
    def __init__(self, limbo_dir):
849
       BzrNewError.__init__(self)
850
       self.limbo_dir = limbo_dir
1534.7.163 by Aaron Bentley
Merge from Robert [Fails tests]
851
852
1508.1.22 by Robert Collins
implement out of date working tree checks in commit.
853
class OutOfDateTree(BzrNewError):
854
    """Working tree is out of date, please run 'bzr update'."""
1508.1.25 by Robert Collins
Update per review comments.
855
856
    def __init__(self, tree):
857
        BzrNewError.__init__(self)
858
        self.tree = tree
1534.7.196 by Aaron Bentley
Switched to Rio format for merge-modified list
859
1563.2.22 by Robert Collins
Move responsibility for repository.has_revision into RevisionStore
860
1534.7.196 by Aaron Bentley
Switched to Rio format for merge-modified list
861
class MergeModifiedFormatError(BzrNewError):
862
    """Error in merge modified format"""
1534.7.200 by Aaron Bentley
Merge from mainline
863
864
1534.10.7 by Aaron Bentley
Added tests for bad conflict lists
865
class ConflictFormatError(BzrNewError):
866
    """Format error in conflict listings"""
867
868
1570.1.13 by Robert Collins
Check for incorrect revision parentage in the weave during revision access.
869
class CorruptRepository(BzrNewError):
870
    """An error has been detected in the repository %(repo_path)s.
871
Please run bzr reconcile on this repository."""
872
873
    def __init__(self, repo):
874
        BzrNewError.__init__(self)
875
        self.repo_path = repo.bzrdir.root_transport.base
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
876
877
878
class UpgradeRequired(BzrNewError):
879
    """To use this feature you must upgrade your branch at %(path)s."""
880
881
    def __init__(self, path):
882
        BzrNewError.__init__(self)
883
        self.path = path
884
1587.1.8 by Robert Collins
Local commits on unbound branches fail.
885
886
class LocalRequiresBoundBranch(BzrNewError):
887
    """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.
888
889
890
class MissingProgressBarFinish(BzrNewError):
891
    """A nested progress bar was not 'finished' correctly."""
1534.10.8 by Aaron Bentley
Implemented conflict_lines in terms of old system on WorkingTree
892
893
894
class UnsupportedOperation(BzrNewError):
895
    """The method %(mname)s is not supported on objects of type %(tname)s."""
896
    def __init__(self, method, method_self):
897
        self.method = method
898
        self.mname = method.__name__
899
        self.tname = type(method_self).__name__
1558.15.1 by Aaron Bentley
Add text_file function
900
901
902
class BinaryFile(BzrNewError):
903
    """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)
904
905
906
class IllegalPath(BzrNewError):
907
    """The path %(path)s is not permitted on this platform"""
908
909
    def __init__(self, path):
910
        BzrNewError.__init__(self)
911
        self.path = path