1
# Copyright (C) 2005-2010 Canonical Ltd
1
# Copyright (C) 2005, 2006, 2007, 2008 Canonical Ltd
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
702
702
# TODO: Probably this behavior of should be a common superclass
703
703
class NotBranchError(PathError):
705
_fmt = 'Not a branch: "%(path)s"%(detail)s.'
705
_fmt = 'Not a branch: "%(path)s".'
707
def __init__(self, path, detail=None, bzrdir=None):
707
def __init__(self, path):
708
708
import bzrlib.urlutils as urlutils
709
path = urlutils.unescape_for_display(path, 'ascii')
710
if detail is not None:
711
detail = ': ' + detail
714
PathError.__init__(self, path=path)
717
# XXX: Ideally self.detail would be a property, but Exceptions in
718
# Python 2.4 have to be old-style classes so properties don't work.
719
# Instead we override _format.
720
if self.detail is None:
721
if self.bzrdir is not None:
723
self.bzrdir.open_repository()
724
except NoRepositoryPresent:
727
self.detail = ': location is a repository'
730
return PathError._format(self)
709
self.path = urlutils.unescape_for_display(path, 'ascii')
733
712
class NoSubmitBranch(PathError):
783
762
_fmt = 'File "%(path)s" is not in branch %(branch_base)s.'
785
# use PathNotChild instead
786
@symbol_versioning.deprecated_method(symbol_versioning.deprecated_in((2, 3, 0)))
787
764
def __init__(self, branch, path):
788
765
BzrError.__init__(self)
789
766
self.branch = branch
818
795
class IncompatibleRepositories(BzrError):
819
"""Report an error that two repositories are not compatible.
821
Note that the source and target repositories are permitted to be strings:
822
this exception is thrown from the smart server and may refer to a
823
repository the client hasn't opened.
826
797
_fmt = "%(target)s\n" \
827
798
"is not compatible with\n" \
949
920
# original exception is available as e.original_error
951
922
# New code should prefer to raise specific subclasses
952
def __init__(self, msg):
923
def __init__(self, message):
924
# Python 2.5 uses a slot for StandardError.message,
925
# so use a different variable name. We now work around this in
926
# BzrError.__str__, but this member name is kept for compatability.
956
930
class LockActive(LockError):
1177
1153
class InvalidRevisionSpec(BzrError):
1179
_fmt = ("Requested revision: '%(spec)s' does not exist in branch:"
1180
" %(branch_url)s%(extra)s")
1155
_fmt = ("Requested revision: %(spec)r does not exist in branch:"
1156
" %(branch)s%(extra)s")
1182
1158
def __init__(self, spec, branch, extra=None):
1183
1159
BzrError.__init__(self, branch=branch, spec=spec)
1184
self.branch_url = getattr(branch, 'user_url', str(branch))
1186
1161
self.extra = '\n' + str(extra)
1266
1241
class AmbiguousBase(BzrError):
1268
1243
def __init__(self, bases):
1269
symbol_versioning.warn("BzrError AmbiguousBase has been deprecated "
1270
"as of bzrlib 0.8.", DeprecationWarning, stacklevel=2)
1244
warn("BzrError AmbiguousBase has been deprecated as of bzrlib 0.8.",
1271
1246
msg = ("The correct base is unclear, because %s are all equally close"
1272
1247
% ", ".join(bases))
1273
1248
BzrError.__init__(self, msg)
1295
1270
class BoundBranchOutOfDate(BzrError):
1297
1272
_fmt = ("Bound branch %(branch)s is out of date with master branch"
1298
" %(master)s.%(extra_help)s")
1300
1275
def __init__(self, branch, master):
1301
1276
BzrError.__init__(self)
1302
1277
self.branch = branch
1303
1278
self.master = master
1304
self.extra_help = ''
1307
1281
class CommitToDoubleBoundBranch(BzrError):
1379
1353
class WeaveParentMismatch(WeaveError):
1381
_fmt = "Parents are mismatched between two revisions. %(msg)s"
1355
_fmt = "Parents are mismatched between two revisions. %(message)s"
1384
1358
class WeaveInvalidChecksum(WeaveError):
1386
_fmt = "Text did not match it's checksum: %(msg)s"
1360
_fmt = "Text did not match it's checksum: %(message)s"
1389
1363
class WeaveTextDiffers(WeaveError):
1923
1897
_fmt = "Moving the root directory is not supported at this time"
1926
class TransformRenameFailed(BzrError):
1928
_fmt = "Failed to rename %(from_path)s to %(to_path)s: %(why)s"
1930
def __init__(self, from_path, to_path, why, errno):
1931
self.from_path = from_path
1932
self.to_path = to_path
1937
1900
class BzrMoveFailedError(BzrError):
1939
1902
_fmt = "Could not move %(from_path)s%(operator)s %(to_path)s%(extra)s"
2186
2149
def __init__(self, repo):
2187
2150
BzrError.__init__(self)
2188
self.repo_path = repo.user_url
2151
self.repo_path = repo.bzrdir.root_transport.base
2191
2154
class InconsistentDelta(BzrError):
2764
2727
def __init__(self, bzrdir):
2765
2728
import bzrlib.urlutils as urlutils
2766
display_url = urlutils.unescape_for_display(bzrdir.user_url,
2729
display_url = urlutils.unescape_for_display(bzrdir.root_transport.base,
2768
2731
BzrError.__init__(self, bzrdir=bzrdir, display_url=display_url)
2844
2807
more = ' ' + more
2845
2808
import bzrlib.urlutils as urlutils
2846
user_url = getattr(tree, "user_url", None)
2847
if user_url is None:
2848
display_url = str(tree)
2850
display_url = urlutils.unescape_for_display(user_url, 'ascii')
2809
display_url = urlutils.unescape_for_display(
2810
tree.bzrdir.root_transport.base, 'ascii')
2851
2811
BzrError.__init__(self, tree=tree, display_url=display_url, more=more)
2854
class ShelvedChanges(UncommittedChanges):
2856
_fmt = ('Working tree "%(display_url)s" has shelved changes'
2857
' (See bzr shelve --list).%(more)s')
2860
2814
class MissingTemplateVariable(BzrError):
2862
2816
_fmt = 'Variable {%(name)s} is not available.'
2982
2936
class HookFailed(BzrError):
2983
2937
"""Raised when a pre_change_branch_tip hook function fails anything other
2984
2938
than TipChangeRejected.
2986
Note that this exception is no longer raised, and the import is only left
2987
to be nice to code which might catch it in a plugin.
2990
2941
_fmt = ("Hook '%(hook_name)s' during %(hook_stage)s failed:\n"
2991
2942
"%(traceback_text)s%(exc_value)s")
2993
def __init__(self, hook_stage, hook_name, exc_info, warn=True):
2995
symbol_versioning.warn("BzrError HookFailed has been deprecated "
2996
"as of bzrlib 2.1.", DeprecationWarning, stacklevel=2)
2944
def __init__(self, hook_stage, hook_name, exc_info):
2997
2945
import traceback
2998
2946
self.hook_stage = hook_stage
2999
2947
self.hook_name = hook_name
3121
3069
def __init__(self, source_branch, target_branch):
3122
3070
self.source_branch = source_branch
3123
3071
self.target_branch = target_branch
3126
class NoRoundtrippingSupport(BzrError):
3128
_fmt = ("Roundtripping is not supported between %(source_branch)r and "
3129
"%(target_branch)r.")
3131
internal_error = True
3133
def __init__(self, source_branch, target_branch):
3134
self.source_branch = source_branch
3135
self.target_branch = target_branch
3138
class FileTimestampUnavailable(BzrError):
3140
_fmt = "The filestamp for %(path)s is not available."
3142
internal_error = True
3144
def __init__(self, path):
3148
class NoColocatedBranchSupport(BzrError):
3150
_fmt = ("%(bzrdir)r does not support co-located branches.")
3152
def __init__(self, bzrdir):
3153
self.bzrdir = bzrdir
3156
class NoWhoami(BzrError):
3158
_fmt = ('Unable to determine your name.\n'
3159
"Please, set your name with the 'whoami' command.\n"
3160
'E.g. bzr whoami "Your Name <name@example.com>"')
3163
class InvalidPattern(BzrError):
3165
_fmt = ('Invalid pattern(s) found. %(msg)s')
3167
def __init__(self, msg):
3171
class RecursiveBind(BzrError):
3173
_fmt = ('Branch "%(branch_url)s" appears to be bound to itself. '
3174
'Please use `bzr unbind` to fix.')
3176
def __init__(self, branch_url):
3177
self.branch_url = branch_url