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"
1984
1947
"Use --keep to not delete them, or --force to delete them regardless.")
1986
1949
def __init__(self, tree_delta):
1987
symbol_versioning.warn(symbol_versioning.deprecated_in((2, 3, 0)) %
1988
"BzrRemoveChangedFilesError", DeprecationWarning, stacklevel=2)
1989
1950
BzrError.__init__(self)
1990
1951
self.changes_as_text = tree_delta.get_changes_as_text()
1991
1952
#self.paths_as_string = '\n'.join(changed_files)
2046
2007
class BadConversionTarget(BzrError):
2048
_fmt = "Cannot convert from format %(from_format)s to format %(format)s." \
2009
_fmt = "Cannot convert to format %(format)s. %(problem)s"
2051
def __init__(self, problem, format, from_format=None):
2011
def __init__(self, problem, format):
2052
2012
BzrError.__init__(self)
2053
2013
self.problem = problem
2054
2014
self.format = format
2055
self.from_format = from_format or '(unspecified)'
2058
2017
class NoDiffFound(BzrError):
2188
2147
def __init__(self, repo):
2189
2148
BzrError.__init__(self)
2190
self.repo_path = repo.user_url
2149
self.repo_path = repo.bzrdir.root_transport.base
2193
2152
class InconsistentDelta(BzrError):
2766
2725
def __init__(self, bzrdir):
2767
2726
import bzrlib.urlutils as urlutils
2768
display_url = urlutils.unescape_for_display(bzrdir.user_url,
2727
display_url = urlutils.unescape_for_display(bzrdir.root_transport.base,
2770
2729
BzrError.__init__(self, bzrdir=bzrdir, display_url=display_url)
2846
2805
more = ' ' + more
2847
2806
import bzrlib.urlutils as urlutils
2848
user_url = getattr(tree, "user_url", None)
2849
if user_url is None:
2850
display_url = str(tree)
2852
display_url = urlutils.unescape_for_display(user_url, 'ascii')
2807
display_url = urlutils.unescape_for_display(
2808
tree.bzrdir.root_transport.base, 'ascii')
2853
2809
BzrError.__init__(self, tree=tree, display_url=display_url, more=more)
2856
class ShelvedChanges(UncommittedChanges):
2858
_fmt = ('Working tree "%(display_url)s" has shelved changes'
2859
' (See bzr shelve --list).%(more)s')
2862
2812
class MissingTemplateVariable(BzrError):
2864
2814
_fmt = 'Variable {%(name)s} is not available.'
2968
2918
_fmt = 'Cannot bind address "%(host)s:%(port)i": %(orig_error)s.'
2970
2920
def __init__(self, host, port, orig_error):
2971
# nb: in python2.4 socket.error doesn't have a useful repr
2972
2921
BzrError.__init__(self, host=host, port=port,
2973
orig_error=repr(orig_error.args))
2922
orig_error=orig_error[1])
2976
2925
class UnknownRules(BzrError):
2984
2933
class HookFailed(BzrError):
2985
2934
"""Raised when a pre_change_branch_tip hook function fails anything other
2986
2935
than TipChangeRejected.
2988
Note that this exception is no longer raised, and the import is only left
2989
to be nice to code which might catch it in a plugin.
2992
2938
_fmt = ("Hook '%(hook_name)s' during %(hook_stage)s failed:\n"
2993
2939
"%(traceback_text)s%(exc_value)s")
2995
def __init__(self, hook_stage, hook_name, exc_info, warn=True):
2997
symbol_versioning.warn("BzrError HookFailed has been deprecated "
2998
"as of bzrlib 2.1.", DeprecationWarning, stacklevel=2)
2941
def __init__(self, hook_stage, hook_name, exc_info):
2999
2942
import traceback
3000
2943
self.hook_stage = hook_stage
3001
2944
self.hook_name = hook_name
3123
3066
def __init__(self, source_branch, target_branch):
3124
3067
self.source_branch = source_branch
3125
3068
self.target_branch = target_branch
3128
class NoRoundtrippingSupport(BzrError):
3130
_fmt = ("Roundtripping is not supported between %(source_branch)r and "
3131
"%(target_branch)r.")
3133
internal_error = True
3135
def __init__(self, source_branch, target_branch):
3136
self.source_branch = source_branch
3137
self.target_branch = target_branch
3140
class FileTimestampUnavailable(BzrError):
3142
_fmt = "The filestamp for %(path)s is not available."
3144
internal_error = True
3146
def __init__(self, path):
3150
class NoColocatedBranchSupport(BzrError):
3152
_fmt = ("%(bzrdir)r does not support co-located branches.")
3154
def __init__(self, bzrdir):
3155
self.bzrdir = bzrdir
3158
class NoWhoami(BzrError):
3160
_fmt = ('Unable to determine your name.\n'
3161
"Please, set your name with the 'whoami' command.\n"
3162
'E.g. bzr whoami "Your Name <name@example.com>"')
3165
class InvalidPattern(BzrError):
3167
_fmt = ('Invalid pattern(s) found. %(msg)s')
3169
def __init__(self, msg):
3173
class RecursiveBind(BzrError):
3175
_fmt = ('Branch "%(branch_url)s" appears to be bound to itself. '
3176
'Please use `bzr unbind` to fix.')
3178
def __init__(self, branch_url):
3179
self.branch_url = branch_url