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