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