~bzr-pqm/bzr/bzr.dev

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