/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
1553.5.24 by Martin Pool
Warning to check storage when lock was broken
1
# Copyright (C) 2005, 2006 Canonical
1 by mbp at sourcefrog
import from baz patch-364
2
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
1185.16.61 by mbp at sourcefrog
- start introducing hct error classes
17
"""Exceptions for bzr, and reporting of them.
18
19
Exceptions are caught at a high level to report errors to the user, and
20
might also be caught inside the program.  Therefore it needs to be
21
possible to convert them to a meaningful string, and also for them to be
22
interrogated by the program.
23
24
Exceptions are defined such that the arguments given to the constructor
25
are stored in the object as properties of the same name.  When the
26
object is printed as a string, the doc string of the class is used as
27
a format string with the property dictionary available to it.
28
29
This means that exceptions can used like this:
30
31
>>> import sys
32
>>> try:
33
...   raise NotBranchError(path='/foo/bar')
34
... except:
35
...   print sys.exc_type
36
...   print sys.exc_value
1185.50.38 by John Arbash Meinel
Changed exception traceback route to not use hasattr, which generates its own exception.
37
...   path = getattr(sys.exc_value, 'path')
38
...   if path is not None:
39
...     print path
1185.16.61 by mbp at sourcefrog
- start introducing hct error classes
40
bzrlib.errors.NotBranchError
41
Not a branch: /foo/bar
42
/foo/bar
43
44
Therefore:
45
46
 * create a new exception class for any class of error that can be
47
   usefully distinguished.
48
49
 * the printable form of an exception is generated by the base class
50
   __str__ method
1185.33.7 by Martin Pool
Better formatting of builtin errors
51
52
Exception strings should start with a capital letter and not have a final
53
fullstop.
1185.16.61 by mbp at sourcefrog
- start introducing hct error classes
54
"""
55
1614.2.13 by Olaf Conradi
Re-added AmbiguousBase with a deprecated warning.
56
from warnings import warn
57
1185.16.61 by mbp at sourcefrog
- start introducing hct error classes
58
# based on Scott James Remnant's hct error classes
59
1185.16.62 by mbp at sourcefrog
- convert NotBranchError to new exception base
60
# TODO: is there any value in providing the .args field used by standard
61
# python exceptions?   A list of values with no names seems less useful 
62
# to me.
63
1185.16.63 by Martin Pool
- more error conversion
64
# TODO: Perhaps convert the exception to a string at the moment it's 
65
# constructed to make sure it will succeed.  But that says nothing about
66
# exceptions that are never raised.
67
68
# TODO: Convert all the other error classes here to BzrNewError, and eliminate
69
# the old one.
1185.16.62 by mbp at sourcefrog
- convert NotBranchError to new exception base
70
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
599 by Martin Pool
- better error reporting from smart_add
272
class BadFileKindError(BzrError):
273
    """Specified file is of a kind that cannot be added.
274
275
    (For example a symlink or device file.)"""
276
277
278
class ForbiddenFileError(BzrError):
279
    """Cannot operate on a file because it is a control file."""
280
281
1553.5.11 by Martin Pool
Change some lock and transaction related exceptions to BzrNewException style
282
class LockError(BzrNewError):
283
    """Lock error: %(message)s"""
1185.16.63 by Martin Pool
- more error conversion
284
    # All exceptions from the lock/unlock functions should be from
285
    # this exception class.  They will be translated as necessary. The
286
    # original exception is available as e.original_error
1553.5.11 by Martin Pool
Change some lock and transaction related exceptions to BzrNewException style
287
    #
288
    # New code should prefer to raise specific subclasses
289
    def __init__(self, message):
290
        self.message = message
882 by Martin Pool
- Optionally raise EmptyCommit if there are no changes. Test for this.
291
292
1417.1.6 by Robert Collins
introduce transactions for grouping actions done to and with branches
293
class CommitNotPossible(LockError):
294
    """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
295
    def __init__(self):
296
        pass
1417.1.6 by Robert Collins
introduce transactions for grouping actions done to and with branches
297
298
299
class AlreadyCommitted(LockError):
300
    """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
301
    def __init__(self):
302
        pass
1417.1.6 by Robert Collins
introduce transactions for grouping actions done to and with branches
303
304
1417.1.8 by Robert Collins
use transactions in the weave store interface, which enables caching for log
305
class ReadOnlyError(LockError):
1553.5.33 by Martin Pool
LockDir review comment fixes
306
    """A write attempt was made in a read only transaction on %(obj)s"""
307
    def __init__(self, obj):
308
        self.obj = obj
1553.5.11 by Martin Pool
Change some lock and transaction related exceptions to BzrNewException style
309
310
1594.2.21 by Robert Collins
Teach versioned files to prevent mutation after finishing.
311
class OutSideTransaction(BzrNewError):
312
    """A transaction related operation was attempted after the transaction finished."""
313
314
1553.5.36 by Martin Pool
Clean up duplicate BranchNotLocked error and rename to ObjectNotLocked
315
class ObjectNotLocked(LockError):
316
    """%(obj)r is not locked"""
317
    # this can indicate that any particular object is not locked; see also
318
    # LockNotHeld which means that a particular *lock* object is not held by
319
    # the caller -- perhaps they should be unified.
320
    def __init__(self, obj):
321
        self.obj = obj
1553.5.11 by Martin Pool
Change some lock and transaction related exceptions to BzrNewException style
322
323
324
class ReadOnlyObjectDirtiedError(ReadOnlyError):
325
    """Cannot change object %(obj)r in read only transaction"""
326
    def __init__(self, obj):
327
        self.obj = obj
328
329
330
class UnlockableTransport(LockError):
331
    """Cannot lock: transport is read only: %(transport)s"""
332
    def __init__(self, transport):
333
        self.transport = transport
334
335
336
class LockContention(LockError):
337
    """Could not acquire lock %(lock)s"""
338
    # TODO: show full url for lock, combining the transport and relative bits?
339
    def __init__(self, lock):
340
        self.lock = lock
341
342
1553.5.23 by Martin Pool
Start LockDir.confirm method and LockBroken exception
343
class LockBroken(LockError):
1553.5.24 by Martin Pool
Warning to check storage when lock was broken
344
    """Lock was broken while still open: %(lock)s - check storage consistency!"""
1553.5.23 by Martin Pool
Start LockDir.confirm method and LockBroken exception
345
    def __init__(self, lock):
346
        self.lock = lock
347
348
1553.5.27 by Martin Pool
Confirm that only the intended holder of a lock was broken.
349
class LockBreakMismatch(LockError):
350
    """Lock was released and re-acquired before being broken: %(lock)s: held by %(holder)r, wanted to break %(target)r"""
351
    def __init__(self, lock, holder, target):
352
        self.lock = lock
353
        self.holder = holder
354
        self.target = target
355
356
1553.5.11 by Martin Pool
Change some lock and transaction related exceptions to BzrNewException style
357
class LockNotHeld(LockError):
358
    """Lock not held: %(lock)s"""
359
    def __init__(self, lock):
360
        self.lock = lock
361
362
1185.16.63 by Martin Pool
- more error conversion
363
class PointlessCommit(BzrNewError):
1185.16.64 by Martin Pool
- more error conversions
364
    """No changes to commit"""
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
365
1551.3.1 by Aaron Bentley
PEP8 fixes
366
1534.4.13 by Robert Collins
Give a reasonable warning on attempts to upgrade a readonly url.
367
class UpgradeReadonly(BzrNewError):
368
    """Upgrade URL cannot work with readonly URL's."""
369
370
1534.5.7 by Robert Collins
Start factoring out the upgrade policy logic.
371
class UpToDateFormat(BzrNewError):
372
    """The branch format %(format)s is already at the most recent format."""
373
374
    def __init__(self, format):
375
        BzrNewError.__init__(self)
376
        self.format = format
377
378
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
379
1185.22.1 by Michael Ellerman
Implement strict commits with --strict flag.
380
class StrictCommitFailed(Exception):
381
    """Commit refused because there are unknowns in the tree."""
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
382
1505.1.2 by John Arbash Meinel
(broken) working on implementing bound branches.
383
974.1.26 by aaron.bentley at utoronto
merged mbp@sourcefrog.net-20050817233101-0939da1cf91f2472
384
class NoSuchRevision(BzrError):
385
    def __init__(self, branch, revision):
386
        self.branch = branch
387
        self.revision = revision
388
        msg = "Branch %s has no revision %s" % (branch, revision)
389
        BzrError.__init__(self, msg)
390
1034 by Martin Pool
- merge bzrlib.revision.is_ancestor from aaron
391
1192 by Martin Pool
- clean up code for retrieving stored inventories
392
class HistoryMissing(BzrError):
393
    def __init__(self, branch, object_type, object_id):
394
        self.branch = branch
395
        BzrError.__init__(self,
396
                          '%s is missing %s {%s}'
397
                          % (branch, object_type, object_id))
398
399
1185.2.1 by Lalo Martins
moving DivergedBranches from bzrlib.branch to bzrlib.errors, obeying:
400
class DivergedBranches(BzrError):
1649.1.1 by Robert Collins
* 'pull' and 'push' now normalise the revision history, so that any two
401
1185.2.1 by Lalo Martins
moving DivergedBranches from bzrlib.branch to bzrlib.errors, obeying:
402
    def __init__(self, branch1, branch2):
1185.56.1 by Michael Ellerman
Simplify handling of DivergedBranches in cmd_pull()
403
        BzrError.__init__(self, "These branches have diverged.  Try merge.")
1185.2.1 by Lalo Martins
moving DivergedBranches from bzrlib.branch to bzrlib.errors, obeying:
404
        self.branch1 = branch1
405
        self.branch2 = branch2
406
1390 by Robert Collins
pair programming worx... merge integration and weave
407
1105 by Martin Pool
- expose 'find-merge-base' as a new expert command,
408
class UnrelatedBranches(BzrCommandError):
409
    def __init__(self):
410
        msg = "Branches have no common ancestor, and no base revision"\
411
            " specified."
412
        BzrCommandError.__init__(self, msg)
413
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
414
974.1.80 by Aaron Bentley
Improved merge error handling and testing
415
class NoCommonAncestor(BzrError):
416
    def __init__(self, revision_a, revision_b):
417
        msg = "Revisions have no common ancestor: %s %s." \
418
            % (revision_a, revision_b) 
419
        BzrError.__init__(self, msg)
420
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
421
974.1.80 by Aaron Bentley
Improved merge error handling and testing
422
class NoCommonRoot(BzrError):
423
    def __init__(self, revision_a, revision_b):
424
        msg = "Revisions are not derived from the same root: %s %s." \
425
            % (revision_a, revision_b) 
426
        BzrError.__init__(self, msg)
1105 by Martin Pool
- expose 'find-merge-base' as a new expert command,
427
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
428
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
429
974.2.7 by aaron.bentley at utoronto
Merged from bzr.24
430
class NotAncestor(BzrError):
431
    def __init__(self, rev_id, not_ancestor_id):
1185.1.14 by Robert Collins
remove more duplicate merged hunks. Bad MERGE3, BAD.
432
        msg = "Revision %s is not an ancestor of %s" % (not_ancestor_id, 
433
                                                        rev_id)
434
        BzrError.__init__(self, msg)
435
        self.rev_id = rev_id
436
        self.not_ancestor_id = not_ancestor_id
1185.1.12 by Robert Collins
merge in lsdiff/filterdiff friendliness
437
438
974.1.30 by aaron.bentley at utoronto
Changed copy_multi to permit failure and return a tuple, tested missing required revisions
439
class InstallFailed(BzrError):
440
    def __init__(self, revisions):
1185.1.14 by Robert Collins
remove more duplicate merged hunks. Bad MERGE3, BAD.
441
        msg = "Could not install revisions:\n%s" % " ,".join(revisions)
442
        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
443
        self.revisions = revisions
1154 by Martin Pool
- fix imports for moved errors
444
445
1614.2.13 by Olaf Conradi
Re-added AmbiguousBase with a deprecated warning.
446
class AmbiguousBase(BzrError):
447
    def __init__(self, bases):
448
        warn("BzrError AmbiguousBase has been deprecated as of bzrlib 0.8.",
449
                DeprecationWarning)
450
        msg = "The correct base is unclear, becase %s are all equally close" %\
451
            ", ".join(bases)
452
        BzrError.__init__(self, msg)
453
        self.bases = bases
454
455
974.1.80 by Aaron Bentley
Improved merge error handling and testing
456
class NoCommits(BzrError):
457
    def __init__(self, branch):
458
        msg = "Branch %s has no commits." % branch
459
        BzrError.__init__(self, msg)
1185.10.1 by Aaron Bentley
Added --basis option to bzr branch
460
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
461
1185.10.1 by Aaron Bentley
Added --basis option to bzr branch
462
class UnlistableStore(BzrError):
463
    def __init__(self, store):
464
        BzrError.__init__(self, "Store %s is not listable" % store)
465
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
466
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
467
1185.10.1 by Aaron Bentley
Added --basis option to bzr branch
468
class UnlistableBranch(BzrError):
469
    def __init__(self, br):
470
        BzrError.__init__(self, "Stores for branch %s are not listable" % br)
1392 by Robert Collins
reinstate testfetch test case
471
472
1505.1.24 by John Arbash Meinel
Updated commit to handle bound branches. Included test to handle commit after merge
473
class BoundBranchOutOfDate(BzrNewError):
474
    """Bound branch %(branch)s is out of date with master branch %(master)s."""
475
    def __init__(self, branch, master):
476
        BzrNewError.__init__(self)
477
        self.branch = branch
478
        self.master = master
479
480
        
481
class CommitToDoubleBoundBranch(BzrNewError):
482
    """Cannot commit to branch %(branch)s. It is bound to %(master)s, which is bound to %(remote)s."""
483
    def __init__(self, branch, master, remote):
484
        BzrNewError.__init__(self)
485
        self.branch = branch
486
        self.master = master
487
        self.remote = remote
488
1505.1.25 by John Arbash Meinel
Updated pull. Now all paths which call set_revision_history maintain the branch invariant. All tests pass.
489
490
class OverwriteBoundBranch(BzrNewError):
491
    """Cannot pull --overwrite to a branch which is bound %(branch)s"""
492
    def __init__(self, branch):
493
        BzrNewError.__init__(self)
494
        self.branch = branch
495
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
496
497
class BoundBranchConnectionFailure(BzrNewError):
498
    """Unable to connect to target of bound branch %(branch)s => %(target)s: %(error)s"""
499
    def __init__(self, branch, target, error):
500
        BzrNewError.__init__(self)
501
        self.branch = branch
502
        self.target = target
503
        self.error = error
504
505
1185.16.116 by mbp at sourcefrog
Move weave errors into bzrlib.errors and make consistent with new system.
506
class WeaveError(BzrNewError):
507
    """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.
508
1185.16.116 by mbp at sourcefrog
Move weave errors into bzrlib.errors and make consistent with new system.
509
    def __init__(self, message=None):
510
        BzrNewError.__init__(self)
511
        self.message = message
512
513
514
class WeaveRevisionAlreadyPresent(WeaveError):
515
    """Revision {%(revision_id)s} already present in %(weave)s"""
516
    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.
517
1185.16.116 by mbp at sourcefrog
Move weave errors into bzrlib.errors and make consistent with new system.
518
        WeaveError.__init__(self)
519
        self.revision_id = revision_id
520
        self.weave = weave
521
522
523
class WeaveRevisionNotPresent(WeaveError):
524
    """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.
525
1185.16.116 by mbp at sourcefrog
Move weave errors into bzrlib.errors and make consistent with new system.
526
    def __init__(self, revision_id, weave):
527
        WeaveError.__init__(self)
528
        self.revision_id = revision_id
529
        self.weave = weave
530
531
532
class WeaveFormatError(WeaveError):
533
    """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.
534
1185.16.116 by mbp at sourcefrog
Move weave errors into bzrlib.errors and make consistent with new system.
535
    def __init__(self, what):
536
        WeaveError.__init__(self)
537
        self.what = what
538
539
540
class WeaveParentMismatch(WeaveError):
541
    """Parents are mismatched between two revisions."""
542
    
1393.2.1 by John Arbash Meinel
Merged in split-storage-2 branch. Need to cleanup a little bit more still.
543
1185.50.23 by John Arbash Meinel
Adding sha1 check when weave extracts a text.
544
class WeaveInvalidChecksum(WeaveError):
545
    """Text did not match it's checksum: %(message)s"""
546
547
1551.3.11 by Aaron Bentley
Merge from Robert
548
class WeaveTextDiffers(WeaveError):
549
    """Weaves differ on text content. Revision: {%(revision_id)s}, %(weave_a)s, %(weave_b)s"""
550
551
    def __init__(self, revision_id, weave_a, weave_b):
552
        WeaveError.__init__(self)
553
        self.revision_id = revision_id
554
        self.weave_a = weave_a
555
        self.weave_b = weave_b
556
557
1534.7.158 by Aaron Bentley
Merged John Meinel's integration
558
class WeaveTextDiffers(WeaveError):
559
    """Weaves differ on text content. Revision: {%(revision_id)s}, %(weave_a)s, %(weave_b)s"""
560
561
    def __init__(self, revision_id, weave_a, weave_b):
562
        WeaveError.__init__(self)
563
        self.revision_id = revision_id
564
        self.weave_a = weave_a
565
        self.weave_b = weave_b
566
567
1563.2.1 by Robert Collins
Merge in a variation of the versionedfile api from versioned-file.
568
class VersionedFileError(BzrNewError):
569
    """Versioned file error."""
570
571
572
class RevisionNotPresent(VersionedFileError):
573
    """Revision {%(revision_id)s} not present in %(file_id)s."""
574
575
    def __init__(self, revision_id, file_id):
576
        VersionedFileError.__init__(self)
577
        self.revision_id = revision_id
578
        self.file_id = file_id
579
580
581
class RevisionAlreadyPresent(VersionedFileError):
582
    """Revision {%(revision_id)s} already present in %(file_id)s."""
583
584
    def __init__(self, revision_id, file_id):
585
        VersionedFileError.__init__(self)
586
        self.revision_id = revision_id
587
        self.file_id = file_id
588
589
590
class KnitError(BzrNewError):
591
    """Knit error"""
592
593
594
class KnitHeaderError(KnitError):
595
    """Knit header error: %(badline)r unexpected"""
596
597
    def __init__(self, badline):
598
        KnitError.__init__(self)
599
        self.badline = badline
600
601
602
class KnitCorrupt(KnitError):
603
    """Knit %(filename)s corrupt: %(how)s"""
604
605
    def __init__(self, filename, how):
606
        KnitError.__init__(self)
607
        self.filename = filename
608
        self.how = how
609
610
1185.31.12 by John Arbash Meinel
Refactored the export code to make it easier to add new export formats.
611
class NoSuchExportFormat(BzrNewError):
612
    """Export format %(format)r not supported"""
613
    def __init__(self, format):
614
        BzrNewError.__init__(self)
615
        self.format = format
616
617
1185.11.9 by John Arbash Meinel
Most tests pass, some problems with unavailable socket recv
618
class TransportError(BzrError):
619
    """All errors thrown by Transport implementations should derive
620
    from this class.
621
    """
622
    def __init__(self, msg=None, orig_error=None):
623
        if msg is None and orig_error is not None:
624
            msg = str(orig_error)
625
        BzrError.__init__(self, msg)
626
        self.msg = msg
627
        self.orig_error = orig_error
628
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
629
1185.11.9 by John Arbash Meinel
Most tests pass, some problems with unavailable socket recv
630
# A set of semi-meaningful errors which can be thrown
631
class TransportNotPossible(TransportError):
632
    """This is for transports where a specific function is explicitly not
633
    possible. Such as pushing files to an HTTP server.
634
    """
635
    pass
636
1185.31.44 by John Arbash Meinel
Cleaned up Exceptions for all transports.
637
638
class ConnectionError(TransportError):
639
    """A connection problem prevents file retrieval.
1185.35.31 by Aaron Bentley
Throw ConnectionError instead of NoSuchFile except when we get a 404
640
    This does not indicate whether the file exists or not; it indicates that a
641
    precondition for requesting the file was not met.
642
    """
1185.31.44 by John Arbash Meinel
Cleaned up Exceptions for all transports.
643
    def __init__(self, msg=None, orig_error=None):
644
        TransportError.__init__(self, msg=msg, orig_error=orig_error)
645
1185.11.9 by John Arbash Meinel
Most tests pass, some problems with unavailable socket recv
646
647
class ConnectionReset(TransportError):
648
    """The connection has been closed."""
649
    pass
650
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
651
1185.14.10 by Aaron Bentley
Commit aborts with conflicts in the tree.
652
class ConflictsInTree(BzrError):
653
    def __init__(self):
654
        BzrError.__init__(self, "Working tree has conflicts.")
1185.12.49 by Aaron Bentley
Switched to ConfigObj
655
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
656
1185.12.49 by Aaron Bentley
Switched to ConfigObj
657
class ParseConfigError(BzrError):
658
    def __init__(self, errors, filename):
659
        if filename is None:
660
            filename = ""
661
        message = "Error(s) parsing config file %s:\n%s" % \
662
            (filename, ('\n'.join(e.message for e in errors)))
663
        BzrError.__init__(self, message)
1185.12.52 by Aaron Bentley
Merged more config stuff from Robert
664
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
665
1442.1.58 by Robert Collins
gpg signing of content
666
class SigningFailed(BzrError):
667
    def __init__(self, command_line):
668
        BzrError.__init__(self, "Failed to gpg sign data with command '%s'"
669
                               % command_line)
1185.12.83 by Aaron Bentley
Preliminary weave merge support
670
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
671
1185.12.83 by Aaron Bentley
Preliminary weave merge support
672
class WorkingTreeNotRevision(BzrError):
673
    def __init__(self, tree):
674
        BzrError.__init__(self, "The working tree for %s has changed since"
675
                          " last commit, but weave merge requires that it be"
676
                          " unchanged." % tree.basedir)
1185.12.104 by Aaron Bentley
Merged Martin's latest
677
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
678
1185.24.1 by Aaron Bentley
Got reprocessing working
679
class CantReprocessAndShowBase(BzrNewError):
680
    """Can't reprocess and show base.
681
Reprocessing obscures relationship of conflicting lines to base."""
1185.24.2 by Aaron Bentley
Merge from mainline
682
1551.2.1 by Aaron Bentley
recommit 1527 PEP8 fixes
683
1185.16.114 by mbp at sourcefrog
Improved topological sort
684
class GraphCycleError(BzrNewError):
685
    """Cycle in graph %(graph)r"""
686
    def __init__(self, graph):
687
        BzrNewError.__init__(self)
688
        self.graph = graph
1185.35.1 by Aaron Bentley
Implemented conflicts.restore
689
1505.1.23 by John Arbash Meinel
Whitespace cleanup of bzrlib.errors
690
1185.35.1 by Aaron Bentley
Implemented conflicts.restore
691
class NotConflicted(BzrNewError):
1185.35.4 by Aaron Bentley
Implemented remerge
692
    """File %(filename)s is not conflicted."""
1534.3.1 by Robert Collins
* bzrlib.osutils.safe_unicode now exists to provide parameter coercion
693
1185.35.1 by Aaron Bentley
Implemented conflicts.restore
694
    def __init__(self, filename):
695
        BzrNewError.__init__(self)
696
        self.filename = filename
1185.35.13 by Aaron Bentley
Merged Martin
697
1505.1.23 by John Arbash Meinel
Whitespace cleanup of bzrlib.errors
698
1492 by Robert Collins
Support decoration of commands.
699
class MustUseDecorated(Exception):
700
    """A decorating function has requested its original command be used.
701
    
702
    This should never escape bzr, so does not need to be printable.
703
    """
704
1505.1.23 by John Arbash Meinel
Whitespace cleanup of bzrlib.errors
705
1185.35.42 by Aaron Bentley
Fixed fetch to be safer wrt ghosts and corrupt branches
706
class MissingText(BzrNewError):
707
    """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
708
1185.35.42 by Aaron Bentley
Fixed fetch to be safer wrt ghosts and corrupt branches
709
    def __init__(self, branch, text_revision, file_id):
1534.3.1 by Robert Collins
* bzrlib.osutils.safe_unicode now exists to provide parameter coercion
710
        BzrNewError.__init__(self)
1185.35.42 by Aaron Bentley
Fixed fetch to be safer wrt ghosts and corrupt branches
711
        self.branch = branch
712
        self.base = branch.base
713
        self.text_revision = text_revision
714
        self.file_id = file_id
1534.7.5 by Aaron Bentley
Got unique_add under test
715
1505.1.23 by John Arbash Meinel
Whitespace cleanup of bzrlib.errors
716
1534.7.5 by Aaron Bentley
Got unique_add under test
717
class DuplicateKey(BzrNewError):
718
    """Key %(key)s is already present in map"""
1534.7.6 by Aaron Bentley
Added conflict handling
719
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
720
1534.7.6 by Aaron Bentley
Added conflict handling
721
class MalformedTransform(BzrNewError):
1534.7.49 by Aaron Bentley
Printed conflicts in MalformedTransform
722
    """Tree transform is malformed %(conflicts)r"""
1534.7.24 by Aaron Bentley
Merge from the mainline
723
1534.3.1 by Robert Collins
* bzrlib.osutils.safe_unicode now exists to provide parameter coercion
724
725
class BzrBadParameter(BzrNewError):
1185.65.29 by Robert Collins
Implement final review suggestions.
726
    """A bad parameter : %(param)s is not usable.
1534.3.1 by Robert Collins
* bzrlib.osutils.safe_unicode now exists to provide parameter coercion
727
    
1185.65.29 by Robert Collins
Implement final review suggestions.
728
    This exception should never be thrown, but it is a base class for all
729
    parameter-to-function errors.
730
    """
1534.3.1 by Robert Collins
* bzrlib.osutils.safe_unicode now exists to provide parameter coercion
731
    def __init__(self, param):
732
        BzrNewError.__init__(self)
733
        self.param = param
1534.7.32 by Aaron Bentley
Got conflict handling working when conflicts involve existing files
734
1534.4.3 by Robert Collins
Implement BranchTestProviderAdapter, so tests now run across all branch formats.
735
1185.65.29 by Robert Collins
Implement final review suggestions.
736
class BzrBadParameterNotUnicode(BzrBadParameter):
737
    """Parameter %(param)s is neither unicode nor utf8."""
1534.7.120 by Aaron Bentley
PEP8 fixes
738
739
1534.7.32 by Aaron Bentley
Got conflict handling working when conflicts involve existing files
740
class ReusingTransform(BzrNewError):
741
    """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
742
1534.7.120 by Aaron Bentley
PEP8 fixes
743
1534.7.66 by Aaron Bentley
Ensured we don't accidentally move the root directory
744
class CantMoveRoot(BzrNewError):
745
    """Moving the root directory is not supported at this time"""
1185.65.29 by Robert Collins
Implement final review suggestions.
746
1534.7.120 by Aaron Bentley
PEP8 fixes
747
1185.65.29 by Robert Collins
Implement final review suggestions.
748
class BzrBadParameterNotString(BzrBadParameter):
749
    """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.
750
751
1534.4.44 by Robert Collins
Make a new BzrDir format that uses a versioned branch format in a branch/ subdirectory.
752
class BzrBadParameterMissing(BzrBadParameter):
753
    """Parameter $(param)s is required but not present."""
754
755
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.
756
class DependencyNotPresent(BzrNewError):
1540.3.7 by Martin Pool
Prepare to select a transport depending on what dependencies can be satisfied.
757
    """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.
758
759
    def __init__(self, library, error):
760
        BzrNewError.__init__(self, library=library, error=error)
761
762
763
class ParamikoNotPresent(DependencyNotPresent):
764
    """Unable to import paramiko (required for sftp support): %(error)s"""
765
766
    def __init__(self, error):
767
        DependencyNotPresent.__init__(self, 'paramiko', error)
768
769
1534.4.3 by Robert Collins
Implement BranchTestProviderAdapter, so tests now run across all branch formats.
770
class UninitializableFormat(BzrNewError):
771
    """Format %(format)s cannot be initialised by this version of bzr."""
772
773
    def __init__(self, format):
774
        BzrNewError.__init__(self)
775
        self.format = format
1551.3.4 by Aaron Bentley
Implemented default command options
776
1534.7.156 by Aaron Bentley
PEP8 fixes
777
1534.7.130 by Aaron Bentley
More conflict handling, test porting
778
class NoDiff3(BzrNewError):
779
    """Diff3 is not installed on this machine."""
1534.7.162 by Aaron Bentley
Handle failures creating/deleting the Limbo directory
780
781
782
class ExistingLimbo(BzrNewError):
783
    """This tree contains left-over files from a failed operation.
784
    Please examine %(limbo_dir)s to see if it contains any files you wish to
785
    keep, and delete it when you are done.
786
    """
787
    def __init__(self, limbo_dir):
788
       BzrNewError.__init__(self)
789
       self.limbo_dir = limbo_dir
790
791
792
class ImmortalLimbo(BzrNewError):
793
    """Unable to delete transform temporary directory $(limbo_dir)s.
794
    Please examine %(limbo_dir)s to see if it contains any files you wish to
795
    keep, and delete it when you are done.
796
    """
797
    def __init__(self, limbo_dir):
798
       BzrNewError.__init__(self)
799
       self.limbo_dir = limbo_dir
1534.7.163 by Aaron Bentley
Merge from Robert [Fails tests]
800
801
1508.1.22 by Robert Collins
implement out of date working tree checks in commit.
802
class OutOfDateTree(BzrNewError):
803
    """Working tree is out of date, please run 'bzr update'."""
1508.1.25 by Robert Collins
Update per review comments.
804
805
    def __init__(self, tree):
806
        BzrNewError.__init__(self)
807
        self.tree = tree
1534.7.196 by Aaron Bentley
Switched to Rio format for merge-modified list
808
1563.2.22 by Robert Collins
Move responsibility for repository.has_revision into RevisionStore
809
1534.7.196 by Aaron Bentley
Switched to Rio format for merge-modified list
810
class MergeModifiedFormatError(BzrNewError):
811
    """Error in merge modified format"""
1534.7.200 by Aaron Bentley
Merge from mainline
812
813
1534.10.7 by Aaron Bentley
Added tests for bad conflict lists
814
class ConflictFormatError(BzrNewError):
815
    """Format error in conflict listings"""
816
817
1570.1.13 by Robert Collins
Check for incorrect revision parentage in the weave during revision access.
818
class CorruptRepository(BzrNewError):
819
    """An error has been detected in the repository %(repo_path)s.
820
Please run bzr reconcile on this repository."""
821
822
    def __init__(self, repo):
823
        BzrNewError.__init__(self)
824
        self.repo_path = repo.bzrdir.root_transport.base
1587.1.6 by Robert Collins
Update bound branch implementation to 0.8.
825
826
827
class UpgradeRequired(BzrNewError):
828
    """To use this feature you must upgrade your branch at %(path)s."""
829
830
    def __init__(self, path):
831
        BzrNewError.__init__(self)
832
        self.path = path
833
1587.1.8 by Robert Collins
Local commits on unbound branches fail.
834
835
class LocalRequiresBoundBranch(BzrNewError):
836
    """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.
837
838
839
class MissingProgressBarFinish(BzrNewError):
840
    """A nested progress bar was not 'finished' correctly."""
1534.10.8 by Aaron Bentley
Implemented conflict_lines in terms of old system on WorkingTree
841
842
843
class UnsupportedOperation(BzrNewError):
844
    """The method %(mname)s is not supported on objects of type %(tname)s."""
845
    def __init__(self, method, method_self):
846
        self.method = method
847
        self.mname = method.__name__
848
        self.tname = type(method_self).__name__