~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/errors.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2009-08-13 18:51:45 UTC
  • mfrom: (4595.5.3 jam-integration)
  • Revision ID: pqm@pqm.ubuntu.com-20090813185145-ta4t40a5t8z05amk
(Neil Martinsen-Burrell) Include bazaar-vcs.org/BzrGivingBack in
        HACKING.txt

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005-2010 Canonical Ltd
 
1
# Copyright (C) 2005, 2006, 2007, 2008 Canonical Ltd
2
2
#
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
680
680
 
681
681
    _fmt = 'Path "%(path)s" is not a child of path "%(base)s"%(extra)s'
682
682
 
683
 
    internal_error = False
 
683
    internal_error = True
684
684
 
685
685
    def __init__(self, path, base, extra=None):
686
686
        BzrError.__init__(self)
702
702
# TODO: Probably this behavior of should be a common superclass
703
703
class NotBranchError(PathError):
704
704
 
705
 
    _fmt = 'Not a branch: "%(path)s"%(detail)s.'
 
705
    _fmt = 'Not a branch: "%(path)s".'
706
706
 
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
712
 
       self.detail = detail
713
 
       self.bzrdir = bzrdir
714
 
       PathError.__init__(self, path=path)
715
 
 
716
 
    def _format(self):
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:
722
 
                try:
723
 
                    self.bzrdir.open_repository()
724
 
                except NoRepositoryPresent:
725
 
                    self.detail = ''
726
 
                else:
727
 
                    self.detail = ': location is a repository'
728
 
            else:
729
 
                self.detail = ''
730
 
        return PathError._format(self)
 
709
       self.path = urlutils.unescape_for_display(path, 'ascii')
731
710
 
732
711
 
733
712
class NoSubmitBranch(PathError):
782
761
 
783
762
    _fmt = 'File "%(path)s" is not in branch %(branch_base)s.'
784
763
 
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
816
793
 
817
794
 
818
795
class IncompatibleRepositories(BzrError):
819
 
    """Report an error that two repositories are not compatible.
820
 
 
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.
824
 
    """
825
796
 
826
797
    _fmt = "%(target)s\n" \
827
798
            "is not compatible with\n" \
949
920
    # original exception is available as e.original_error
950
921
    #
951
922
    # New code should prefer to raise specific subclasses
952
 
    def __init__(self, msg):
953
 
        self.msg = 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.
 
927
        self.msg = message
954
928
 
955
929
 
956
930
class LockActive(LockError):
1040
1014
class LockContention(LockError):
1041
1015
 
1042
1016
    _fmt = 'Could not acquire lock "%(lock)s": %(msg)s'
 
1017
    # TODO: show full url for lock, combining the transport and relative
 
1018
    # bits?
1043
1019
 
1044
1020
    internal_error = False
1045
1021
 
1176
1152
 
1177
1153
class InvalidRevisionSpec(BzrError):
1178
1154
 
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")
1181
1157
 
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))
1185
1160
        if extra:
1186
1161
            self.extra = '\n' + str(extra)
1187
1162
        else:
1266
1241
class AmbiguousBase(BzrError):
1267
1242
 
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.",
 
1245
                DeprecationWarning)
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):
1296
1271
 
1297
1272
    _fmt = ("Bound branch %(branch)s is out of date with master branch"
1298
 
            " %(master)s.%(extra_help)s")
 
1273
            " %(master)s.")
1299
1274
 
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 = ''
1305
1279
 
1306
1280
 
1307
1281
class CommitToDoubleBoundBranch(BzrError):
1378
1352
 
1379
1353
class WeaveParentMismatch(WeaveError):
1380
1354
 
1381
 
    _fmt = "Parents are mismatched between two revisions. %(msg)s"
 
1355
    _fmt = "Parents are mismatched between two revisions. %(message)s"
1382
1356
 
1383
1357
 
1384
1358
class WeaveInvalidChecksum(WeaveError):
1385
1359
 
1386
 
    _fmt = "Text did not match it's checksum: %(msg)s"
 
1360
    _fmt = "Text did not match it's checksum: %(message)s"
1387
1361
 
1388
1362
 
1389
1363
class WeaveTextDiffers(WeaveError):
1437
1411
 
1438
1412
class VersionedFileInvalidChecksum(VersionedFileError):
1439
1413
 
1440
 
    _fmt = "Text did not match its checksum: %(msg)s"
 
1414
    _fmt = "Text did not match its checksum: %(message)s"
1441
1415
 
1442
1416
 
1443
1417
class KnitError(InternalBzrError):
1923
1897
    _fmt = "Moving the root directory is not supported at this time"
1924
1898
 
1925
1899
 
1926
 
class TransformRenameFailed(BzrError):
1927
 
 
1928
 
    _fmt = "Failed to rename %(from_path)s to %(to_path)s: %(why)s"
1929
 
 
1930
 
    def __init__(self, from_path, to_path, why, errno):
1931
 
        self.from_path = from_path
1932
 
        self.to_path = to_path
1933
 
        self.why = why
1934
 
        self.errno = errno
1935
 
 
1936
 
 
1937
1900
class BzrMoveFailedError(BzrError):
1938
1901
 
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.")
1985
1948
 
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)
2045
2006
 
2046
2007
class BadConversionTarget(BzrError):
2047
2008
 
2048
 
    _fmt = "Cannot convert from format %(from_format)s to format %(format)s." \
2049
 
            "    %(problem)s"
 
2009
    _fmt = "Cannot convert to format %(format)s.  %(problem)s"
2050
2010
 
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)'
2056
2015
 
2057
2016
 
2058
2017
class NoDiffFound(BzrError):
2187
2146
 
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
2191
2150
 
2192
2151
 
2193
2152
class InconsistentDelta(BzrError):
2765
2724
 
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,
2769
2728
                                                    'ascii')
2770
2729
        BzrError.__init__(self, bzrdir=bzrdir, display_url=display_url)
2771
2730
 
2845
2804
        else:
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)
2851
 
        else:
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)
2854
2810
 
2855
2811
 
2856
 
class ShelvedChanges(UncommittedChanges):
2857
 
 
2858
 
    _fmt = ('Working tree "%(display_url)s" has shelved changes'
2859
 
            ' (See bzr shelve --list).%(more)s')
2860
 
 
2861
 
 
2862
2812
class MissingTemplateVariable(BzrError):
2863
2813
 
2864
2814
    _fmt = 'Variable {%(name)s} is not available.'
2968
2918
    _fmt = 'Cannot bind address "%(host)s:%(port)i": %(orig_error)s.'
2969
2919
 
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])
2974
2923
 
2975
2924
 
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.
2987
 
 
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.
2990
2936
    """
2991
2937
 
2992
2938
    _fmt = ("Hook '%(hook_name)s' during %(hook_stage)s failed:\n"
2993
2939
            "%(traceback_text)s%(exc_value)s")
2994
2940
 
2995
 
    def __init__(self, hook_stage, hook_name, exc_info, warn=True):
2996
 
        if warn:
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
3126
 
 
3127
 
 
3128
 
class NoRoundtrippingSupport(BzrError):
3129
 
 
3130
 
    _fmt = ("Roundtripping is not supported between %(source_branch)r and "
3131
 
            "%(target_branch)r.")
3132
 
 
3133
 
    internal_error = True
3134
 
 
3135
 
    def __init__(self, source_branch, target_branch):
3136
 
        self.source_branch = source_branch
3137
 
        self.target_branch = target_branch
3138
 
 
3139
 
 
3140
 
class FileTimestampUnavailable(BzrError):
3141
 
 
3142
 
    _fmt = "The filestamp for %(path)s is not available."
3143
 
 
3144
 
    internal_error = True
3145
 
 
3146
 
    def __init__(self, path):
3147
 
        self.path = path
3148
 
 
3149
 
 
3150
 
class NoColocatedBranchSupport(BzrError):
3151
 
 
3152
 
    _fmt = ("%(bzrdir)r does not support co-located branches.")
3153
 
 
3154
 
    def __init__(self, bzrdir):
3155
 
        self.bzrdir = bzrdir
3156
 
 
3157
 
 
3158
 
class NoWhoami(BzrError):
3159
 
 
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>"')
3163
 
 
3164
 
 
3165
 
class InvalidPattern(BzrError):
3166
 
 
3167
 
    _fmt = ('Invalid pattern(s) found. %(msg)s')
3168
 
 
3169
 
    def __init__(self, msg):
3170
 
        self.msg = msg
3171
 
 
3172
 
 
3173
 
class RecursiveBind(BzrError):
3174
 
 
3175
 
    _fmt = ('Branch "%(branch_url)s" appears to be bound to itself. '
3176
 
        'Please use `bzr unbind` to fix.')
3177
 
 
3178
 
    def __init__(self, branch_url):
3179
 
        self.branch_url = branch_url
3180