1
# Copyright (C) 2005-2011 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
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)
709
self.path = urlutils.unescape_for_display(path, 'ascii')
745
712
class NoSubmitBranch(PathError):
795
762
_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
764
def __init__(self, branch, path):
800
765
BzrError.__init__(self)
801
766
self.branch = branch
830
795
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
797
_fmt = "%(target)s\n" \
839
798
"is not compatible with\n" \
961
920
# original exception is available as e.original_error
963
922
# New code should prefer to raise specific subclasses
964
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.
968
930
class LockActive(LockError):
1084
1048
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
1051
class LockNotHeld(LockError):
1101
1053
_fmt = "Lock not held: %(lock)s"
1201
1153
class InvalidRevisionSpec(BzrError):
1203
_fmt = ("Requested revision: '%(spec)s' does not exist in branch:"
1204
" %(branch_url)s%(extra)s")
1155
_fmt = ("Requested revision: %(spec)r does not exist in branch:"
1156
" %(branch)s%(extra)s")
1206
1158
def __init__(self, spec, branch, extra=None):
1207
1159
BzrError.__init__(self, branch=branch, spec=spec)
1208
self.branch_url = getattr(branch, 'user_url', str(branch))
1210
1161
self.extra = '\n' + str(extra)
1290
1241
class AmbiguousBase(BzrError):
1292
1243
def __init__(self, bases):
1293
symbol_versioning.warn("BzrError AmbiguousBase has been deprecated "
1294
"as of bzrlib 0.8.", DeprecationWarning, stacklevel=2)
1244
warn("BzrError AmbiguousBase has been deprecated as of bzrlib 0.8.",
1295
1246
msg = ("The correct base is unclear, because %s are all equally close"
1296
1247
% ", ".join(bases))
1297
1248
BzrError.__init__(self, msg)
1319
1270
class BoundBranchOutOfDate(BzrError):
1321
1272
_fmt = ("Bound branch %(branch)s is out of date with master branch"
1322
" %(master)s.%(extra_help)s")
1324
1275
def __init__(self, branch, master):
1325
1276
BzrError.__init__(self)
1326
1277
self.branch = branch
1327
1278
self.master = master
1328
self.extra_help = ''
1331
1281
class CommitToDoubleBoundBranch(BzrError):
1403
1353
class WeaveParentMismatch(WeaveError):
1405
_fmt = "Parents are mismatched between two revisions. %(msg)s"
1355
_fmt = "Parents are mismatched between two revisions. %(message)s"
1408
1358
class WeaveInvalidChecksum(WeaveError):
1410
_fmt = "Text did not match its checksum: %(msg)s"
1360
_fmt = "Text did not match it's checksum: %(message)s"
1413
1363
class WeaveTextDiffers(WeaveError):
1947
1897
_fmt = "Moving the root directory is not supported at this time"
1950
class TransformRenameFailed(BzrError):
1952
_fmt = "Failed to rename %(from_path)s to %(to_path)s: %(why)s"
1954
def __init__(self, from_path, to_path, why, errno):
1955
self.from_path = from_path
1956
self.to_path = to_path
1961
1900
class BzrMoveFailedError(BzrError):
1963
_fmt = ("Could not move %(from_path)s%(operator)s %(to_path)s"
1964
"%(_has_extra)s%(extra)s")
1902
_fmt = "Could not move %(from_path)s%(operator)s %(to_path)s%(extra)s"
1966
1904
def __init__(self, from_path='', to_path='', extra=None):
1967
1905
from bzrlib.osutils import splitpath
1968
1906
BzrError.__init__(self)
1970
self.extra, self._has_extra = extra, ': '
1908
self.extra = ': ' + str(extra)
1972
self.extra = self._has_extra = ''
1974
1912
has_from = len(from_path) > 0
1975
1913
has_to = len(to_path) > 0
1997
1935
class BzrRenameFailedError(BzrMoveFailedError):
1999
_fmt = ("Could not rename %(from_path)s%(operator)s %(to_path)s"
2000
"%(_has_extra)s%(extra)s")
1937
_fmt = "Could not rename %(from_path)s%(operator)s %(to_path)s%(extra)s"
2002
1939
def __init__(self, from_path, to_path, extra=None):
2003
1940
BzrMoveFailedError.__init__(self, from_path, to_path, extra)
2006
1942
class BzrRemoveChangedFilesError(BzrError):
2007
1943
"""Used when user is trying to remove changed files."""
2011
1947
"Use --keep to not delete them, or --force to delete them regardless.")
2013
1949
def __init__(self, tree_delta):
2014
symbol_versioning.warn(symbol_versioning.deprecated_in((2, 3, 0)) %
2015
"BzrRemoveChangedFilesError", DeprecationWarning, stacklevel=2)
2016
1950
BzrError.__init__(self)
2017
1951
self.changes_as_text = tree_delta.get_changes_as_text()
2018
1952
#self.paths_as_string = '\n'.join(changed_files)
2027
1961
class BzrBadParameterMissing(BzrBadParameter):
2029
_fmt = "Parameter %(param)s is required but not present."
1963
_fmt = "Parameter $(param)s is required but not present."
2032
1966
class BzrBadParameterUnicode(BzrBadParameter):
2215
2149
def __init__(self, repo):
2216
2150
BzrError.__init__(self)
2217
self.repo_path = repo.user_url
2151
self.repo_path = repo.bzrdir.root_transport.base
2220
2154
class InconsistentDelta(BzrError):
2793
2727
def __init__(self, bzrdir):
2794
2728
import bzrlib.urlutils as urlutils
2795
display_url = urlutils.unescape_for_display(bzrdir.user_url,
2729
display_url = urlutils.unescape_for_display(bzrdir.root_transport.base,
2797
2731
BzrError.__init__(self, bzrdir=bzrdir, display_url=display_url)
2873
2807
more = ' ' + more
2874
2808
import bzrlib.urlutils as urlutils
2875
user_url = getattr(tree, "user_url", None)
2876
if user_url is None:
2877
display_url = str(tree)
2879
display_url = urlutils.unescape_for_display(user_url, 'ascii')
2809
display_url = urlutils.unescape_for_display(
2810
tree.bzrdir.root_transport.base, 'ascii')
2880
2811
BzrError.__init__(self, tree=tree, display_url=display_url, more=more)
2883
class ShelvedChanges(UncommittedChanges):
2885
_fmt = ('Working tree "%(display_url)s" has shelved changes'
2886
' (See bzr shelve --list).%(more)s')
2889
2814
class MissingTemplateVariable(BzrError):
2891
2816
_fmt = 'Variable {%(name)s} is not available.'
2960
2885
self.user_encoding = osutils.get_user_encoding()
2963
class NoSuchConfig(BzrError):
2965
_fmt = ('The "%(config_id)s" configuration does not exist.')
2967
def __init__(self, config_id):
2968
BzrError.__init__(self, config_id=config_id)
2971
class NoSuchConfigOption(BzrError):
2973
_fmt = ('The "%(option_name)s" configuration option does not exist.')
2975
def __init__(self, option_name):
2976
BzrError.__init__(self, option_name=option_name)
2979
2888
class NoSuchAlias(BzrError):
2981
2890
_fmt = ('The alias "%(alias_name)s" does not exist.')
3027
2936
class HookFailed(BzrError):
3028
2937
"""Raised when a pre_change_branch_tip hook function fails anything other
3029
2938
than TipChangeRejected.
3031
Note that this exception is no longer raised, and the import is only left
3032
to be nice to code which might catch it in a plugin.
3035
2941
_fmt = ("Hook '%(hook_name)s' during %(hook_stage)s failed:\n"
3036
2942
"%(traceback_text)s%(exc_value)s")
3038
def __init__(self, hook_stage, hook_name, exc_info, warn=True):
3040
symbol_versioning.warn("BzrError HookFailed has been deprecated "
3041
"as of bzrlib 2.1.", DeprecationWarning, stacklevel=2)
2944
def __init__(self, hook_stage, hook_name, exc_info):
3042
2945
import traceback
3043
2946
self.hook_stage = hook_stage
3044
2947
self.hook_name = hook_name
3166
3069
def __init__(self, source_branch, target_branch):
3167
3070
self.source_branch = source_branch
3168
3071
self.target_branch = target_branch
3171
class NoRoundtrippingSupport(BzrError):
3173
_fmt = ("Roundtripping is not supported between %(source_branch)r and "
3174
"%(target_branch)r.")
3176
internal_error = True
3178
def __init__(self, source_branch, target_branch):
3179
self.source_branch = source_branch
3180
self.target_branch = target_branch
3183
class FileTimestampUnavailable(BzrError):
3185
_fmt = "The filestamp for %(path)s is not available."
3187
internal_error = True
3189
def __init__(self, path):
3193
class NoColocatedBranchSupport(BzrError):
3195
_fmt = ("%(bzrdir)r does not support co-located branches.")
3197
def __init__(self, bzrdir):
3198
self.bzrdir = bzrdir
3201
class NoWhoami(BzrError):
3203
_fmt = ('Unable to determine your name.\n'
3204
"Please, set your name with the 'whoami' command.\n"
3205
'E.g. bzr whoami "Your Name <name@example.com>"')
3208
class InvalidPattern(BzrError):
3210
_fmt = ('Invalid pattern(s) found. %(msg)s')
3212
def __init__(self, msg):
3216
class RecursiveBind(BzrError):
3218
_fmt = ('Branch "%(branch_url)s" appears to be bound to itself. '
3219
'Please use `bzr unbind` to fix.')
3221
def __init__(self, branch_url):
3222
self.branch_url = branch_url