1
# Copyright (C) 2005, 2006, 2007, 2008 Canonical Ltd
1
# Copyright (C) 2005-2010 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".'
705
_fmt = 'Not a branch: "%(path)s"%(detail)s.'
707
def __init__(self, path):
707
def __init__(self, path, detail=None, bzrdir=None):
708
708
import bzrlib.urlutils as urlutils
709
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
# 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)
712
733
class NoSubmitBranch(PathError):
762
783
_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)))
764
787
def __init__(self, branch, path):
765
788
BzrError.__init__(self)
766
789
self.branch = branch
795
818
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.
797
826
_fmt = "%(target)s\n" \
798
827
"is not compatible with\n" \
920
949
# original exception is available as e.original_error
922
951
# New code should prefer to raise specific subclasses
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.
952
def __init__(self, msg):
930
956
class LockActive(LockError):
1153
1177
class InvalidRevisionSpec(BzrError):
1155
_fmt = ("Requested revision: %(spec)r does not exist in branch:"
1156
" %(branch)s%(extra)s")
1179
_fmt = ("Requested revision: '%(spec)s' does not exist in branch:"
1180
" %(branch_url)s%(extra)s")
1158
1182
def __init__(self, spec, branch, extra=None):
1159
1183
BzrError.__init__(self, branch=branch, spec=spec)
1184
self.branch_url = getattr(branch, 'user_url', str(branch))
1161
1186
self.extra = '\n' + str(extra)
1241
1266
class AmbiguousBase(BzrError):
1243
1268
def __init__(self, bases):
1244
warn("BzrError AmbiguousBase has been deprecated as of bzrlib 0.8.",
1269
symbol_versioning.warn("BzrError AmbiguousBase has been deprecated "
1270
"as of bzrlib 0.8.", DeprecationWarning, stacklevel=2)
1246
1271
msg = ("The correct base is unclear, because %s are all equally close"
1247
1272
% ", ".join(bases))
1248
1273
BzrError.__init__(self, msg)
1270
1295
class BoundBranchOutOfDate(BzrError):
1272
1297
_fmt = ("Bound branch %(branch)s is out of date with master branch"
1298
" %(master)s.%(extra_help)s")
1275
1300
def __init__(self, branch, master):
1276
1301
BzrError.__init__(self)
1277
1302
self.branch = branch
1278
1303
self.master = master
1304
self.extra_help = ''
1281
1307
class CommitToDoubleBoundBranch(BzrError):
1353
1379
class WeaveParentMismatch(WeaveError):
1355
_fmt = "Parents are mismatched between two revisions. %(message)s"
1381
_fmt = "Parents are mismatched between two revisions. %(msg)s"
1358
1384
class WeaveInvalidChecksum(WeaveError):
1360
_fmt = "Text did not match it's checksum: %(message)s"
1386
_fmt = "Text did not match it's checksum: %(msg)s"
1363
1389
class WeaveTextDiffers(WeaveError):
1897
1923
_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
1900
1937
class BzrMoveFailedError(BzrError):
1902
1939
_fmt = "Could not move %(from_path)s%(operator)s %(to_path)s%(extra)s"
1947
1984
"Use --keep to not delete them, or --force to delete them regardless.")
1949
1986
def __init__(self, tree_delta):
1987
symbol_versioning.warn(symbol_versioning.deprecated_in((2, 3, 0)) %
1988
"BzrRemoveChangedFilesError", DeprecationWarning, stacklevel=2)
1950
1989
BzrError.__init__(self)
1951
1990
self.changes_as_text = tree_delta.get_changes_as_text()
1952
1991
#self.paths_as_string = '\n'.join(changed_files)
2007
2046
class BadConversionTarget(BzrError):
2009
_fmt = "Cannot convert to format %(format)s. %(problem)s"
2048
_fmt = "Cannot convert from format %(from_format)s to format %(format)s." \
2011
def __init__(self, problem, format):
2051
def __init__(self, problem, format, from_format=None):
2012
2052
BzrError.__init__(self)
2013
2053
self.problem = problem
2014
2054
self.format = format
2055
self.from_format = from_format or '(unspecified)'
2017
2058
class NoDiffFound(BzrError):
2147
2188
def __init__(self, repo):
2148
2189
BzrError.__init__(self)
2149
self.repo_path = repo.bzrdir.root_transport.base
2190
self.repo_path = repo.user_url
2152
2193
class InconsistentDelta(BzrError):
2725
2766
def __init__(self, bzrdir):
2726
2767
import bzrlib.urlutils as urlutils
2727
display_url = urlutils.unescape_for_display(bzrdir.root_transport.base,
2768
display_url = urlutils.unescape_for_display(bzrdir.user_url,
2729
2770
BzrError.__init__(self, bzrdir=bzrdir, display_url=display_url)
2805
2846
more = ' ' + more
2806
2847
import bzrlib.urlutils as urlutils
2807
display_url = urlutils.unescape_for_display(
2808
tree.bzrdir.root_transport.base, 'ascii')
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')
2809
2853
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')
2812
2862
class MissingTemplateVariable(BzrError):
2814
2864
_fmt = 'Variable {%(name)s} is not available.'
2918
2968
_fmt = 'Cannot bind address "%(host)s:%(port)i": %(orig_error)s.'
2920
2970
def __init__(self, host, port, orig_error):
2971
# nb: in python2.4 socket.error doesn't have a useful repr
2921
2972
BzrError.__init__(self, host=host, port=port,
2922
orig_error=orig_error[1])
2973
orig_error=repr(orig_error.args))
2925
2976
class UnknownRules(BzrError):
2933
2984
class HookFailed(BzrError):
2934
2985
"""Raised when a pre_change_branch_tip hook function fails anything other
2935
2986
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.
2938
2992
_fmt = ("Hook '%(hook_name)s' during %(hook_stage)s failed:\n"
2939
2993
"%(traceback_text)s%(exc_value)s")
2941
def __init__(self, hook_stage, hook_name, exc_info):
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)
2942
2999
import traceback
2943
3000
self.hook_stage = hook_stage
2944
3001
self.hook_name = hook_name
3066
3123
def __init__(self, source_branch, target_branch):
3067
3124
self.source_branch = source_branch
3068
3125
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