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
926
949
# original exception is available as e.original_error
928
951
# New code should prefer to raise specific subclasses
929
def __init__(self, message):
930
# Python 2.5 uses a slot for StandardError.message,
931
# so use a different variable name. We now work around this in
932
# BzrError.__str__, but this member name is kept for compatability.
952
def __init__(self, msg):
936
956
class LockActive(LockError):
1159
1177
class InvalidRevisionSpec(BzrError):
1161
_fmt = ("Requested revision: %(spec)r does not exist in branch:"
1162
" %(branch)s%(extra)s")
1179
_fmt = ("Requested revision: '%(spec)s' does not exist in branch:"
1180
" %(branch_url)s%(extra)s")
1164
1182
def __init__(self, spec, branch, extra=None):
1165
1183
BzrError.__init__(self, branch=branch, spec=spec)
1184
self.branch_url = getattr(branch, 'user_url', str(branch))
1167
1186
self.extra = '\n' + str(extra)
1247
1266
class AmbiguousBase(BzrError):
1249
1268
def __init__(self, bases):
1250
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)
1252
1271
msg = ("The correct base is unclear, because %s are all equally close"
1253
1272
% ", ".join(bases))
1254
1273
BzrError.__init__(self, msg)
1276
1295
class BoundBranchOutOfDate(BzrError):
1278
1297
_fmt = ("Bound branch %(branch)s is out of date with master branch"
1298
" %(master)s.%(extra_help)s")
1281
1300
def __init__(self, branch, master):
1282
1301
BzrError.__init__(self)
1283
1302
self.branch = branch
1284
1303
self.master = master
1304
self.extra_help = ''
1287
1307
class CommitToDoubleBoundBranch(BzrError):
1359
1379
class WeaveParentMismatch(WeaveError):
1361
_fmt = "Parents are mismatched between two revisions. %(message)s"
1381
_fmt = "Parents are mismatched between two revisions. %(msg)s"
1364
1384
class WeaveInvalidChecksum(WeaveError):
1366
_fmt = "Text did not match it's checksum: %(message)s"
1386
_fmt = "Text did not match it's checksum: %(msg)s"
1369
1389
class WeaveTextDiffers(WeaveError):
1903
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
1906
1937
class BzrMoveFailedError(BzrError):
1908
1939
_fmt = "Could not move %(from_path)s%(operator)s %(to_path)s%(extra)s"
1953
1984
"Use --keep to not delete them, or --force to delete them regardless.")
1955
1986
def __init__(self, tree_delta):
1987
symbol_versioning.warn(symbol_versioning.deprecated_in((2, 3, 0)) %
1988
"BzrRemoveChangedFilesError", DeprecationWarning, stacklevel=2)
1956
1989
BzrError.__init__(self)
1957
1990
self.changes_as_text = tree_delta.get_changes_as_text()
1958
1991
#self.paths_as_string = '\n'.join(changed_files)
2155
2188
def __init__(self, repo):
2156
2189
BzrError.__init__(self)
2157
self.repo_path = repo.bzrdir.root_transport.base
2190
self.repo_path = repo.user_url
2160
2193
class InconsistentDelta(BzrError):
2733
2766
def __init__(self, bzrdir):
2734
2767
import bzrlib.urlutils as urlutils
2735
display_url = urlutils.unescape_for_display(bzrdir.root_transport.base,
2768
display_url = urlutils.unescape_for_display(bzrdir.user_url,
2737
2770
BzrError.__init__(self, bzrdir=bzrdir, display_url=display_url)
2813
2846
more = ' ' + more
2814
2847
import bzrlib.urlutils as urlutils
2815
display_url = urlutils.unescape_for_display(
2816
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')
2817
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')
2820
2862
class MissingTemplateVariable(BzrError):
2822
2864
_fmt = 'Variable {%(name)s} is not available.'
2942
2984
class HookFailed(BzrError):
2943
2985
"""Raised when a pre_change_branch_tip hook function fails anything other
2944
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.
2947
2992
_fmt = ("Hook '%(hook_name)s' during %(hook_stage)s failed:\n"
2948
2993
"%(traceback_text)s%(exc_value)s")
2950
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)
2951
2999
import traceback
2952
3000
self.hook_stage = hook_stage
2953
3001
self.hook_name = hook_name
3075
3123
def __init__(self, source_branch, target_branch):
3076
3124
self.source_branch = source_branch
3077
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