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):
795
816
class IncompatibleRepositories(BzrError):
817
"""Report an error that two repositories are not compatible.
819
Note that the source and target repositories are permitted to be strings:
820
this exception is thrown from the smart server and may refer to a
821
repository the client hasn't opened.
797
824
_fmt = "%(target)s\n" \
798
825
"is not compatible with\n" \
920
947
# original exception is available as e.original_error
922
949
# 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.
950
def __init__(self, msg):
930
954
class LockActive(LockError):
1153
1175
class InvalidRevisionSpec(BzrError):
1155
_fmt = ("Requested revision: %(spec)r does not exist in branch:"
1177
_fmt = ("Requested revision: '%(spec)s' does not exist in branch:"
1156
1178
" %(branch)s%(extra)s")
1158
1180
def __init__(self, spec, branch, extra=None):
1241
1263
class AmbiguousBase(BzrError):
1243
1265
def __init__(self, bases):
1244
warn("BzrError AmbiguousBase has been deprecated as of bzrlib 0.8.",
1266
symbol_versioning.warn("BzrError AmbiguousBase has been deprecated "
1267
"as of bzrlib 0.8.", DeprecationWarning, stacklevel=2)
1246
1268
msg = ("The correct base is unclear, because %s are all equally close"
1247
1269
% ", ".join(bases))
1248
1270
BzrError.__init__(self, msg)
1270
1292
class BoundBranchOutOfDate(BzrError):
1272
1294
_fmt = ("Bound branch %(branch)s is out of date with master branch"
1295
" %(master)s.%(extra_help)s")
1275
1297
def __init__(self, branch, master):
1276
1298
BzrError.__init__(self)
1277
1299
self.branch = branch
1278
1300
self.master = master
1301
self.extra_help = ''
1281
1304
class CommitToDoubleBoundBranch(BzrError):
1353
1376
class WeaveParentMismatch(WeaveError):
1355
_fmt = "Parents are mismatched between two revisions. %(message)s"
1378
_fmt = "Parents are mismatched between two revisions. %(msg)s"
1358
1381
class WeaveInvalidChecksum(WeaveError):
1360
_fmt = "Text did not match it's checksum: %(message)s"
1383
_fmt = "Text did not match it's checksum: %(msg)s"
1363
1386
class WeaveTextDiffers(WeaveError):
1897
1920
_fmt = "Moving the root directory is not supported at this time"
1923
class TransformRenameFailed(BzrError):
1925
_fmt = "Failed to rename %(from_path)s to %(to_path)s: %(why)s"
1927
def __init__(self, from_path, to_path, why, errno):
1928
self.from_path = from_path
1929
self.to_path = to_path
1900
1934
class BzrMoveFailedError(BzrError):
1902
1936
_fmt = "Could not move %(from_path)s%(operator)s %(to_path)s%(extra)s"
2149
2183
def __init__(self, repo):
2150
2184
BzrError.__init__(self)
2151
self.repo_path = repo.bzrdir.root_transport.base
2185
self.repo_path = repo.user_url
2154
2188
class InconsistentDelta(BzrError):
2727
2761
def __init__(self, bzrdir):
2728
2762
import bzrlib.urlutils as urlutils
2729
display_url = urlutils.unescape_for_display(bzrdir.root_transport.base,
2763
display_url = urlutils.unescape_for_display(bzrdir.user_url,
2731
2765
BzrError.__init__(self, bzrdir=bzrdir, display_url=display_url)
2807
2841
more = ' ' + more
2808
2842
import bzrlib.urlutils as urlutils
2809
2843
display_url = urlutils.unescape_for_display(
2810
tree.bzrdir.root_transport.base, 'ascii')
2844
tree.user_url, 'ascii')
2811
2845
BzrError.__init__(self, tree=tree, display_url=display_url, more=more)
2848
class ShelvedChanges(UncommittedChanges):
2850
_fmt = ('Working tree "%(display_url)s" has shelved changes'
2851
' (See bzr shelve --list).%(more)s')
2814
2854
class MissingTemplateVariable(BzrError):
2816
2856
_fmt = 'Variable {%(name)s} is not available.'
2936
2976
class HookFailed(BzrError):
2937
2977
"""Raised when a pre_change_branch_tip hook function fails anything other
2938
2978
than TipChangeRejected.
2980
Note that this exception is no longer raised, and the import is only left
2981
to be nice to code which might catch it in a plugin.
2941
2984
_fmt = ("Hook '%(hook_name)s' during %(hook_stage)s failed:\n"
2942
2985
"%(traceback_text)s%(exc_value)s")
2944
def __init__(self, hook_stage, hook_name, exc_info):
2987
def __init__(self, hook_stage, hook_name, exc_info, warn=True):
2989
symbol_versioning.warn("BzrError HookFailed has been deprecated "
2990
"as of bzrlib 2.1.", DeprecationWarning, stacklevel=2)
2945
2991
import traceback
2946
2992
self.hook_stage = hook_stage
2947
2993
self.hook_name = hook_name
3069
3115
def __init__(self, source_branch, target_branch):
3070
3116
self.source_branch = source_branch
3071
3117
self.target_branch = target_branch
3120
class NoRoundtrippingSupport(BzrError):
3122
_fmt = ("Roundtripping is not supported between %(source_branch)r and "
3123
"%(target_branch)r.")
3125
internal_error = True
3127
def __init__(self, source_branch, target_branch):
3128
self.source_branch = source_branch
3129
self.target_branch = target_branch
3132
class FileTimestampUnavailable(BzrError):
3134
_fmt = "The filestamp for %(path)s is not available."
3136
internal_error = True
3138
def __init__(self, path):
3142
class NoColocatedBranchSupport(BzrError):
3144
_fmt = ("%(bzrdir)r does not support co-located branches.")
3146
def __init__(self, bzrdir):
3147
self.bzrdir = bzrdir
3150
class NoWhoami(BzrError):
3152
_fmt = ('Unable to determine your name.\n'
3153
"Please, set your name with the 'whoami' command.\n"
3154
'E.g. bzr whoami "Your Name <name@example.com>"')
3157
class InvalidPattern(BzrError):
3159
_fmt = ('Invalid pattern(s) found. %(msg)s')
3161
def __init__(self, msg):
3165
class RecursiveBind(BzrError):
3167
_fmt = ('Branch "%(branch_url)s" appears to be bound to itself. '
3168
'Please use `bzr unbind` to fix.')
3170
def __init__(self, branch_url):
3171
self.branch_url = branch_url