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
639
649
class UnstackableRepositoryFormat(BzrError):
641
651
_fmt = ("The repository '%(url)s'(%(format)s) is not a stackable format. "
692
702
# TODO: Probably this behavior of should be a common superclass
693
703
class NotBranchError(PathError):
695
_fmt = 'Not a branch: "%(path)s".'
705
_fmt = 'Not a branch: "%(path)s"%(detail)s.'
697
def __init__(self, path):
707
def __init__(self, path, detail=None, bzrdir=None):
698
708
import bzrlib.urlutils as urlutils
699
self.path = urlutils.unescape_for_display(path, 'ascii')
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)
702
745
class NoSubmitBranch(PathError):
752
795
_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)))
754
799
def __init__(self, branch, path):
755
800
BzrError.__init__(self)
756
801
self.branch = branch
785
830
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.
787
838
_fmt = "%(target)s\n" \
788
839
"is not compatible with\n" \
910
961
# original exception is available as e.original_error
912
963
# New code should prefer to raise specific subclasses
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.
964
def __init__(self, msg):
920
968
class LockActive(LockError):
1038
1084
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
1041
1099
class LockNotHeld(LockError):
1043
1101
_fmt = "Lock not held: %(lock)s"
1082
1140
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)
1085
1152
class BadCommitMessageEncoding(BzrError):
1087
1154
_fmt = 'The specified commit message contains characters unsupported by '\
1143
1210
class InvalidRevisionSpec(BzrError):
1145
_fmt = ("Requested revision: %(spec)r does not exist in branch:"
1146
" %(branch)s%(extra)s")
1212
_fmt = ("Requested revision: '%(spec)s' does not exist in branch:"
1213
" %(branch_url)s%(extra)s")
1148
1215
def __init__(self, spec, branch, extra=None):
1149
1216
BzrError.__init__(self, branch=branch, spec=spec)
1217
self.branch_url = getattr(branch, 'user_url', str(branch))
1151
1219
self.extra = '\n' + str(extra)
1173
1241
class DivergedBranches(BzrError):
1175
1243
_fmt = ("These branches have diverged."
1176
" Use the merge command to reconcile them.")
1244
" Use the missing command to see how.\n"
1245
"Use the merge command to reconcile them.")
1178
1247
def __init__(self, branch1, branch2):
1179
1248
self.branch1 = branch1
1227
1296
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
1239
1299
class AmbiguousBase(BzrError):
1241
1301
def __init__(self, bases):
1242
warn("BzrError AmbiguousBase has been deprecated as of bzrlib 0.8.",
1302
symbol_versioning.warn("BzrError AmbiguousBase has been deprecated "
1303
"as of bzrlib 0.8.", DeprecationWarning, stacklevel=2)
1244
1304
msg = ("The correct base is unclear, because %s are all equally close"
1245
1305
% ", ".join(bases))
1246
1306
BzrError.__init__(self, msg)
1268
1328
class BoundBranchOutOfDate(BzrError):
1270
1330
_fmt = ("Bound branch %(branch)s is out of date with master branch"
1331
" %(master)s.%(extra_help)s")
1273
1333
def __init__(self, branch, master):
1274
1334
BzrError.__init__(self)
1275
1335
self.branch = branch
1276
1336
self.master = master
1337
self.extra_help = ''
1279
1340
class CommitToDoubleBoundBranch(BzrError):
1351
1412
class WeaveParentMismatch(WeaveError):
1353
_fmt = "Parents are mismatched between two revisions. %(message)s"
1414
_fmt = "Parents are mismatched between two revisions. %(msg)s"
1356
1417
class WeaveInvalidChecksum(WeaveError):
1358
_fmt = "Text did not match it's checksum: %(message)s"
1419
_fmt = "Text did not match its checksum: %(msg)s"
1361
1422
class WeaveTextDiffers(WeaveError):
1895
1956
_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
1898
1970
class BzrMoveFailedError(BzrError):
1900
_fmt = "Could not move %(from_path)s%(operator)s %(to_path)s%(extra)s"
1972
_fmt = ("Could not move %(from_path)s%(operator)s %(to_path)s"
1973
"%(_has_extra)s%(extra)s")
1902
1975
def __init__(self, from_path='', to_path='', extra=None):
1903
1976
from bzrlib.osutils import splitpath
1904
1977
BzrError.__init__(self)
1906
self.extra = ': ' + str(extra)
1979
self.extra, self._has_extra = extra, ': '
1981
self.extra = self._has_extra = ''
1910
1983
has_from = len(from_path) > 0
1911
1984
has_to = len(to_path) > 0
1933
2006
class BzrRenameFailedError(BzrMoveFailedError):
1935
_fmt = "Could not rename %(from_path)s%(operator)s %(to_path)s%(extra)s"
2008
_fmt = ("Could not rename %(from_path)s%(operator)s %(to_path)s"
2009
"%(_has_extra)s%(extra)s")
1937
2011
def __init__(self, from_path, to_path, extra=None):
1938
2012
BzrMoveFailedError.__init__(self, from_path, to_path, extra)
1940
2015
class BzrRemoveChangedFilesError(BzrError):
1941
2016
"""Used when user is trying to remove changed files."""
1945
2020
"Use --keep to not delete them, or --force to delete them regardless.")
1947
2022
def __init__(self, tree_delta):
2023
symbol_versioning.warn(symbol_versioning.deprecated_in((2, 3, 0)) %
2024
"BzrRemoveChangedFilesError", DeprecationWarning, stacklevel=2)
1948
2025
BzrError.__init__(self)
1949
2026
self.changes_as_text = tree_delta.get_changes_as_text()
1950
2027
#self.paths_as_string = '\n'.join(changed_files)
2005
2082
class BadConversionTarget(BzrError):
2007
_fmt = "Cannot convert to format %(format)s. %(problem)s"
2084
_fmt = "Cannot convert from format %(from_format)s to format %(format)s." \
2009
def __init__(self, problem, format):
2087
def __init__(self, problem, format, from_format=None):
2010
2088
BzrError.__init__(self)
2011
2089
self.problem = problem
2012
2090
self.format = format
2091
self.from_format = from_format or '(unspecified)'
2015
2094
class NoDiffFound(BzrError):
2092
2171
class OutOfDateTree(BzrError):
2094
_fmt = "Working tree is out of date, please run 'bzr update'."
2173
_fmt = "Working tree is out of date, please run 'bzr update'.%(more)s"
2096
def __init__(self, tree):
2175
def __init__(self, tree, more=None):
2097
2180
BzrError.__init__(self)
2098
2181
self.tree = tree
2101
2185
class PublicBranchOutOfDate(BzrError):
2155
2239
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
2158
2254
class UpgradeRequired(BzrError):
2160
2256
_fmt = "To use this feature you must upgrade your branch at %(path)s."
2169
2265
_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.")
2172
2274
class LocalRequiresBoundBranch(BzrError):
2174
2276
_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)
2186
2279
class UnsupportedOperation(BzrError):
2188
2281
_fmt = ("The method %(mname)s is not supported on"
2709
2802
def __init__(self, bzrdir):
2710
2803
import bzrlib.urlutils as urlutils
2711
display_url = urlutils.unescape_for_display(bzrdir.root_transport.base,
2804
display_url = urlutils.unescape_for_display(bzrdir.user_url,
2713
2806
BzrError.__init__(self, bzrdir=bzrdir, display_url=display_url)
2780
2873
class UncommittedChanges(BzrError):
2782
_fmt = 'Working tree "%(display_url)s" has uncommitted changes.'
2875
_fmt = ('Working tree "%(display_url)s" has uncommitted changes'
2876
' (See bzr status).%(more)s')
2784
def __init__(self, tree):
2878
def __init__(self, tree, more=None):
2785
2883
import bzrlib.urlutils as urlutils
2786
display_url = urlutils.unescape_for_display(
2787
tree.bzrdir.root_transport.base, 'ascii')
2788
BzrError.__init__(self, tree=tree, display_url=display_url)
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')
2791
2898
class MissingTemplateVariable(BzrError):
2867
2969
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)
2870
2988
class NoSuchAlias(BzrError):
2872
2990
_fmt = ('The alias "%(alias_name)s" does not exist.')
2902
3020
_fmt = 'Cannot bind address "%(host)s:%(port)i": %(orig_error)s.'
2904
3022
def __init__(self, host, port, orig_error):
3023
# nb: in python2.4 socket.error doesn't have a useful repr
2905
3024
BzrError.__init__(self, host=host, port=port,
2906
orig_error=orig_error[1])
3025
orig_error=repr(orig_error.args))
2909
3028
class UnknownRules(BzrError):
2917
3036
class HookFailed(BzrError):
2918
3037
"""Raised when a pre_change_branch_tip hook function fails anything other
2919
3038
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.
2922
3044
_fmt = ("Hook '%(hook_name)s' during %(hook_stage)s failed:\n"
2923
3045
"%(traceback_text)s%(exc_value)s")
2925
def __init__(self, hook_stage, hook_name, exc_info):
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)
2926
3051
import traceback
2927
3052
self.hook_stage = hook_stage
2928
3053
self.hook_name = hook_name
2965
3090
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)
2968
3101
class UserAbort(BzrError):
2970
3103
_fmt = 'The user aborted the operation.'
3031
3164
def __init__(self, repository):
3032
3165
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