639
class UnstackableLocationError(BzrError):
641
_fmt = "The branch '%(branch_url)s' cannot be stacked on '%(target_url)s'."
643
def __init__(self, branch_url, target_url):
644
BzrError.__init__(self)
645
self.branch_url = branch_url
646
self.target_url = target_url
649
639
class UnstackableRepositoryFormat(BzrError):
651
641
_fmt = ("The repository '%(url)s'(%(format)s) is not a stackable format. "
702
692
# TODO: Probably this behavior of should be a common superclass
703
693
class NotBranchError(PathError):
705
_fmt = 'Not a branch: "%(path)s"%(detail)s.'
695
_fmt = 'Not a branch: "%(path)s".'
707
def __init__(self, path, detail=None, bzrdir=None):
697
def __init__(self, path):
708
698
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
return '<%s %r>' % (self.__class__.__name__, self.__dict__)
720
# XXX: Ideally self.detail would be a property, but Exceptions in
721
# Python 2.4 have to be old-style classes so properties don't work.
722
# Instead we override _format.
723
if self.detail is None:
724
if self.bzrdir is not None:
726
self.bzrdir.open_repository()
727
except NoRepositoryPresent:
730
# Just ignore unexpected errors. Raising arbitrary errors
731
# during str(err) can provoke strange bugs. Concretely
732
# Launchpad's codehosting managed to raise NotBranchError
733
# here, and then get stuck in an infinite loop/recursion
734
# trying to str() that error. All this error really cares
735
# about that there's no working repository there, and if
736
# open_repository() fails, there probably isn't.
739
self.detail = ': location is a repository'
742
return PathError._format(self)
699
self.path = urlutils.unescape_for_display(path, 'ascii')
745
702
class NoSubmitBranch(PathError):
795
752
_fmt = 'File "%(path)s" is not in branch %(branch_base)s.'
797
# use PathNotChild instead
798
@symbol_versioning.deprecated_method(symbol_versioning.deprecated_in((2, 3, 0)))
799
754
def __init__(self, branch, path):
800
755
BzrError.__init__(self)
801
756
self.branch = branch
830
785
class IncompatibleRepositories(BzrError):
831
"""Report an error that two repositories are not compatible.
833
Note that the source and target repositories are permitted to be strings:
834
this exception is thrown from the smart server and may refer to a
835
repository the client hasn't opened.
838
787
_fmt = "%(target)s\n" \
839
788
"is not compatible with\n" \
961
910
# original exception is available as e.original_error
963
912
# New code should prefer to raise specific subclasses
964
def __init__(self, msg):
913
def __init__(self, message):
914
# Python 2.5 uses a slot for StandardError.message,
915
# so use a different variable name. We now work around this in
916
# BzrError.__str__, but this member name is kept for compatability.
968
920
class LockActive(LockError):
1084
1038
self.target = target
1087
class LockCorrupt(LockError):
1089
_fmt = ("Lock is apparently held, but corrupted: %(corruption_info)s\n"
1090
"Use 'bzr break-lock' to clear it")
1092
internal_error = False
1094
def __init__(self, corruption_info, file_data=None):
1095
self.corruption_info = corruption_info
1096
self.file_data = file_data
1099
1041
class LockNotHeld(LockError):
1101
1043
_fmt = "Lock not held: %(lock)s"
1140
1082
BzrError.__init__(self, files=files, files_str=files_str)
1143
class ExcludesUnsupported(BzrError):
1145
_fmt = ('Excluding paths during commit is not supported by '
1146
'repository at %(repository)r.')
1148
def __init__(self, repository):
1149
BzrError.__init__(self, repository=repository)
1152
1085
class BadCommitMessageEncoding(BzrError):
1154
1087
_fmt = 'The specified commit message contains characters unsupported by '\
1210
1143
class InvalidRevisionSpec(BzrError):
1212
_fmt = ("Requested revision: '%(spec)s' does not exist in branch:"
1213
" %(branch_url)s%(extra)s")
1145
_fmt = ("Requested revision: %(spec)r does not exist in branch:"
1146
" %(branch)s%(extra)s")
1215
1148
def __init__(self, spec, branch, extra=None):
1216
1149
BzrError.__init__(self, branch=branch, spec=spec)
1217
self.branch_url = getattr(branch, 'user_url', str(branch))
1219
1151
self.extra = '\n' + str(extra)
1241
1173
class DivergedBranches(BzrError):
1243
1175
_fmt = ("These branches have diverged."
1244
" Use the missing command to see how.\n"
1245
"Use the merge command to reconcile them.")
1176
" Use the merge command to reconcile them.")
1247
1178
def __init__(self, branch1, branch2):
1248
1179
self.branch1 = branch1
1296
1227
not_ancestor_id=not_ancestor_id)
1230
class InstallFailed(BzrError):
1232
def __init__(self, revisions):
1233
revision_str = ", ".join(str(r) for r in revisions)
1234
msg = "Could not install revisions:\n%s" % revision_str
1235
BzrError.__init__(self, msg)
1236
self.revisions = revisions
1299
1239
class AmbiguousBase(BzrError):
1301
1241
def __init__(self, bases):
1302
symbol_versioning.warn("BzrError AmbiguousBase has been deprecated "
1303
"as of bzrlib 0.8.", DeprecationWarning, stacklevel=2)
1242
warn("BzrError AmbiguousBase has been deprecated as of bzrlib 0.8.",
1304
1244
msg = ("The correct base is unclear, because %s are all equally close"
1305
1245
% ", ".join(bases))
1306
1246
BzrError.__init__(self, msg)
1328
1268
class BoundBranchOutOfDate(BzrError):
1330
1270
_fmt = ("Bound branch %(branch)s is out of date with master branch"
1331
" %(master)s.%(extra_help)s")
1333
1273
def __init__(self, branch, master):
1334
1274
BzrError.__init__(self)
1335
1275
self.branch = branch
1336
1276
self.master = master
1337
self.extra_help = ''
1340
1279
class CommitToDoubleBoundBranch(BzrError):
1412
1351
class WeaveParentMismatch(WeaveError):
1414
_fmt = "Parents are mismatched between two revisions. %(msg)s"
1353
_fmt = "Parents are mismatched between two revisions. %(message)s"
1417
1356
class WeaveInvalidChecksum(WeaveError):
1419
_fmt = "Text did not match its checksum: %(msg)s"
1358
_fmt = "Text did not match it's checksum: %(message)s"
1422
1361
class WeaveTextDiffers(WeaveError):
1956
1895
_fmt = "Moving the root directory is not supported at this time"
1959
class TransformRenameFailed(BzrError):
1961
_fmt = "Failed to rename %(from_path)s to %(to_path)s: %(why)s"
1963
def __init__(self, from_path, to_path, why, errno):
1964
self.from_path = from_path
1965
self.to_path = to_path
1970
1898
class BzrMoveFailedError(BzrError):
1972
_fmt = ("Could not move %(from_path)s%(operator)s %(to_path)s"
1973
"%(_has_extra)s%(extra)s")
1900
_fmt = "Could not move %(from_path)s%(operator)s %(to_path)s%(extra)s"
1975
1902
def __init__(self, from_path='', to_path='', extra=None):
1976
1903
from bzrlib.osutils import splitpath
1977
1904
BzrError.__init__(self)
1979
self.extra, self._has_extra = extra, ': '
1906
self.extra = ': ' + str(extra)
1981
self.extra = self._has_extra = ''
1983
1910
has_from = len(from_path) > 0
1984
1911
has_to = len(to_path) > 0
2006
1933
class BzrRenameFailedError(BzrMoveFailedError):
2008
_fmt = ("Could not rename %(from_path)s%(operator)s %(to_path)s"
2009
"%(_has_extra)s%(extra)s")
1935
_fmt = "Could not rename %(from_path)s%(operator)s %(to_path)s%(extra)s"
2011
1937
def __init__(self, from_path, to_path, extra=None):
2012
1938
BzrMoveFailedError.__init__(self, from_path, to_path, extra)
2015
1940
class BzrRemoveChangedFilesError(BzrError):
2016
1941
"""Used when user is trying to remove changed files."""
2020
1945
"Use --keep to not delete them, or --force to delete them regardless.")
2022
1947
def __init__(self, tree_delta):
2023
symbol_versioning.warn(symbol_versioning.deprecated_in((2, 3, 0)) %
2024
"BzrRemoveChangedFilesError", DeprecationWarning, stacklevel=2)
2025
1948
BzrError.__init__(self)
2026
1949
self.changes_as_text = tree_delta.get_changes_as_text()
2027
1950
#self.paths_as_string = '\n'.join(changed_files)
2082
2005
class BadConversionTarget(BzrError):
2084
_fmt = "Cannot convert from format %(from_format)s to format %(format)s." \
2007
_fmt = "Cannot convert to format %(format)s. %(problem)s"
2087
def __init__(self, problem, format, from_format=None):
2009
def __init__(self, problem, format):
2088
2010
BzrError.__init__(self)
2089
2011
self.problem = problem
2090
2012
self.format = format
2091
self.from_format = from_format or '(unspecified)'
2094
2015
class NoDiffFound(BzrError):
2171
2092
class OutOfDateTree(BzrError):
2173
_fmt = "Working tree is out of date, please run 'bzr update'.%(more)s"
2094
_fmt = "Working tree is out of date, please run 'bzr update'."
2175
def __init__(self, tree, more=None):
2096
def __init__(self, tree):
2180
2097
BzrError.__init__(self)
2181
2098
self.tree = tree
2185
2101
class PublicBranchOutOfDate(BzrError):
2239
2155
self.reason = reason
2242
class InconsistentDeltaDelta(InconsistentDelta):
2243
"""Used when we get a delta that is not valid."""
2245
_fmt = ("An inconsistent delta was supplied: %(delta)r"
2246
"\nreason: %(reason)s")
2248
def __init__(self, delta, reason):
2249
BzrError.__init__(self)
2251
self.reason = reason
2254
2158
class UpgradeRequired(BzrError):
2256
2160
_fmt = "To use this feature you must upgrade your branch at %(path)s."
2265
2169
_fmt = "To use this feature you must upgrade your repository at %(path)s."
2268
class RichRootUpgradeRequired(UpgradeRequired):
2270
_fmt = ("To use this feature you must upgrade your branch at %(path)s to"
2271
" a format which supports rich roots.")
2274
2172
class LocalRequiresBoundBranch(BzrError):
2276
2174
_fmt = "Cannot perform local-only commits on unbound branches."
2177
class InvalidProgressBarType(BzrError):
2179
_fmt = ("Environment variable BZR_PROGRESS_BAR='%(bar_type)s"
2180
" is not a supported type Select one of: %(valid_types)s")
2182
def __init__(self, bar_type, valid_types):
2183
BzrError.__init__(self, bar_type=bar_type, valid_types=valid_types)
2279
2186
class UnsupportedOperation(BzrError):
2281
2188
_fmt = ("The method %(mname)s is not supported on"
2402
2309
self.transport = transport
2312
class NoSmartServer(NotBranchError):
2314
_fmt = "No smart server available at %(url)s"
2316
@symbol_versioning.deprecated_method(symbol_versioning.one_four)
2317
def __init__(self, url):
2405
2321
class UnknownSSH(BzrError):
2407
2323
_fmt = "Unrecognised value for BZR_SSH environment variable: %(vendor)s"
2802
2718
def __init__(self, bzrdir):
2803
2719
import bzrlib.urlutils as urlutils
2804
display_url = urlutils.unescape_for_display(bzrdir.user_url,
2720
display_url = urlutils.unescape_for_display(bzrdir.root_transport.base,
2806
2722
BzrError.__init__(self, bzrdir=bzrdir, display_url=display_url)
2873
2789
class UncommittedChanges(BzrError):
2875
_fmt = ('Working tree "%(display_url)s" has uncommitted changes'
2876
' (See bzr status).%(more)s')
2791
_fmt = 'Working tree "%(display_url)s" has uncommitted changes.'
2878
def __init__(self, tree, more=None):
2793
def __init__(self, tree):
2883
2794
import bzrlib.urlutils as urlutils
2884
user_url = getattr(tree, "user_url", None)
2885
if user_url is None:
2886
display_url = str(tree)
2888
display_url = urlutils.unescape_for_display(user_url, 'ascii')
2889
BzrError.__init__(self, tree=tree, display_url=display_url, more=more)
2892
class ShelvedChanges(UncommittedChanges):
2894
_fmt = ('Working tree "%(display_url)s" has shelved changes'
2895
' (See bzr shelve --list).%(more)s')
2795
display_url = urlutils.unescape_for_display(
2796
tree.bzrdir.root_transport.base, 'ascii')
2797
BzrError.__init__(self, tree=tree, display_url=display_url)
2898
2800
class MissingTemplateVariable(BzrError):
2969
2876
self.user_encoding = osutils.get_user_encoding()
2972
class NoSuchConfig(BzrError):
2974
_fmt = ('The "%(config_id)s" configuration does not exist.')
2976
def __init__(self, config_id):
2977
BzrError.__init__(self, config_id=config_id)
2980
class NoSuchConfigOption(BzrError):
2982
_fmt = ('The "%(option_name)s" configuration option does not exist.')
2984
def __init__(self, option_name):
2985
BzrError.__init__(self, option_name=option_name)
2988
2879
class NoSuchAlias(BzrError):
2990
2881
_fmt = ('The alias "%(alias_name)s" does not exist.')
3020
2911
_fmt = 'Cannot bind address "%(host)s:%(port)i": %(orig_error)s.'
3022
2913
def __init__(self, host, port, orig_error):
3023
# nb: in python2.4 socket.error doesn't have a useful repr
3024
2914
BzrError.__init__(self, host=host, port=port,
3025
orig_error=repr(orig_error.args))
2915
orig_error=orig_error[1])
3028
2918
class UnknownRules(BzrError):
3036
2926
class HookFailed(BzrError):
3037
2927
"""Raised when a pre_change_branch_tip hook function fails anything other
3038
2928
than TipChangeRejected.
3040
Note that this exception is no longer raised, and the import is only left
3041
to be nice to code which might catch it in a plugin.
3044
2931
_fmt = ("Hook '%(hook_name)s' during %(hook_stage)s failed:\n"
3045
2932
"%(traceback_text)s%(exc_value)s")
3047
def __init__(self, hook_stage, hook_name, exc_info, warn=True):
3049
symbol_versioning.warn("BzrError HookFailed has been deprecated "
3050
"as of bzrlib 2.1.", DeprecationWarning, stacklevel=2)
2934
def __init__(self, hook_stage, hook_name, exc_info):
3051
2935
import traceback
3052
2936
self.hook_stage = hook_stage
3053
2937
self.hook_name = hook_name
3090
2974
BzrError.__init__(self, invalid_id=invalid_id)
3093
class JailBreak(BzrError):
3095
_fmt = "An attempt to access a url outside the server jail was made: '%(url)s'."
3097
def __init__(self, url):
3098
BzrError.__init__(self, url=url)
3101
2977
class UserAbort(BzrError):
3103
2979
_fmt = 'The user aborted the operation.'
3164
3040
def __init__(self, repository):
3165
3041
self.repository = repository
3168
class LossyPushToSameVCS(BzrError):
3170
_fmt = ("Lossy push not possible between %(source_branch)r and "
3171
"%(target_branch)r that are in the same VCS.")
3173
internal_error = True
3175
def __init__(self, source_branch, target_branch):
3176
self.source_branch = source_branch
3177
self.target_branch = target_branch
3180
class NoRoundtrippingSupport(BzrError):
3182
_fmt = ("Roundtripping is not supported between %(source_branch)r and "
3183
"%(target_branch)r.")
3185
internal_error = True
3187
def __init__(self, source_branch, target_branch):
3188
self.source_branch = source_branch
3189
self.target_branch = target_branch
3192
class FileTimestampUnavailable(BzrError):
3194
_fmt = "The filestamp for %(path)s is not available."
3196
internal_error = True
3198
def __init__(self, path):
3202
class NoColocatedBranchSupport(BzrError):
3204
_fmt = ("%(bzrdir)r does not support co-located branches.")
3206
def __init__(self, bzrdir):
3207
self.bzrdir = bzrdir
3210
class NoWhoami(BzrError):
3212
_fmt = ('Unable to determine your name.\n'
3213
"Please, set your name with the 'whoami' command.\n"
3214
'E.g. bzr whoami "Your Name <name@example.com>"')
3217
class InvalidPattern(BzrError):
3219
_fmt = ('Invalid pattern(s) found. %(msg)s')
3221
def __init__(self, msg):
3225
class RecursiveBind(BzrError):
3227
_fmt = ('Branch "%(branch_url)s" appears to be bound to itself. '
3228
'Please use `bzr unbind` to fix.')
3230
def __init__(self, branch_url):
3231
self.branch_url = branch_url
3234
# FIXME: I would prefer to define the config related exception classes in
3235
# config.py but the lazy import mechanism proscribes this -- vila 20101222
3236
class OptionExpansionLoop(BzrError):
3238
_fmt = 'Loop involving %(refs)r while expanding "%(string)s".'
3240
def __init__(self, string, refs):
3241
self.string = string
3242
self.refs = '->'.join(refs)
3245
class ExpandingUnknownOption(BzrError):
3247
_fmt = 'Option %(name)s is not defined while expanding "%(string)s".'
3249
def __init__(self, name, string):
3251
self.string = string