~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: 2010-09-01 06:45:57 UTC
  • mfrom: (5247.2.41 more-ignored-exceptions)
  • Revision ID: pqm@pqm.ubuntu.com-20100901064557-qsxmjmp195ozbluf
(vila) Catch EPIPE when shutting down test servers. (Vincent Ladeuil)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005, 2006, 2007, 2008 Canonical Ltd
 
1
# Copyright (C) 2005-2010 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 = True
 
683
    internal_error = False
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".'
 
705
    _fmt = 'Not a branch: "%(path)s"%(detail)s.'
706
706
 
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
 
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)
710
731
 
711
732
 
712
733
class NoSubmitBranch(PathError):
761
782
 
762
783
    _fmt = 'File "%(path)s" is not in branch %(branch_base)s.'
763
784
 
 
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
927
950
    #
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.
933
 
        self.msg = message
 
952
    def __init__(self, msg):
 
953
        self.msg = msg
934
954
 
935
955
 
936
956
class LockActive(LockError):
1020
1040
class LockContention(LockError):
1021
1041
 
1022
1042
    _fmt = 'Could not acquire lock "%(lock)s": %(msg)s'
1023
 
    # TODO: show full url for lock, combining the transport and relative
1024
 
    # bits?
1025
1043
 
1026
1044
    internal_error = False
1027
1045
 
1158
1176
 
1159
1177
class InvalidRevisionSpec(BzrError):
1160
1178
 
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")
1163
1181
 
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))
1166
1185
        if extra:
1167
1186
            self.extra = '\n' + str(extra)
1168
1187
        else:
1247
1266
class AmbiguousBase(BzrError):
1248
1267
 
1249
1268
    def __init__(self, bases):
1250
 
        warn("BzrError AmbiguousBase has been deprecated as of bzrlib 0.8.",
1251
 
                DeprecationWarning)
 
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):
1277
1296
 
1278
1297
    _fmt = ("Bound branch %(branch)s is out of date with master branch"
1279
 
            " %(master)s.")
 
1298
            " %(master)s.%(extra_help)s")
1280
1299
 
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 = ''
1285
1305
 
1286
1306
 
1287
1307
class CommitToDoubleBoundBranch(BzrError):
1358
1378
 
1359
1379
class WeaveParentMismatch(WeaveError):
1360
1380
 
1361
 
    _fmt = "Parents are mismatched between two revisions. %(message)s"
 
1381
    _fmt = "Parents are mismatched between two revisions. %(msg)s"
1362
1382
 
1363
1383
 
1364
1384
class WeaveInvalidChecksum(WeaveError):
1365
1385
 
1366
 
    _fmt = "Text did not match it's checksum: %(message)s"
 
1386
    _fmt = "Text did not match it's checksum: %(msg)s"
1367
1387
 
1368
1388
 
1369
1389
class WeaveTextDiffers(WeaveError):
1417
1437
 
1418
1438
class VersionedFileInvalidChecksum(VersionedFileError):
1419
1439
 
1420
 
    _fmt = "Text did not match its checksum: %(message)s"
 
1440
    _fmt = "Text did not match its checksum: %(msg)s"
1421
1441
 
1422
1442
 
1423
1443
class KnitError(InternalBzrError):
1903
1923
    _fmt = "Moving the root directory is not supported at this time"
1904
1924
 
1905
1925
 
 
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
 
1906
1937
class BzrMoveFailedError(BzrError):
1907
1938
 
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.")
1954
1985
 
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)
2154
2187
 
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
2158
2191
 
2159
2192
 
2160
2193
class InconsistentDelta(BzrError):
2732
2765
 
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,
2736
2769
                                                    'ascii')
2737
2770
        BzrError.__init__(self, bzrdir=bzrdir, display_url=display_url)
2738
2771
 
2812
2845
        else:
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)
 
2851
        else:
 
2852
            display_url = urlutils.unescape_for_display(user_url, 'ascii')
2817
2853
        BzrError.__init__(self, tree=tree, display_url=display_url, more=more)
2818
2854
 
2819
2855
 
 
2856
class ShelvedChanges(UncommittedChanges):
 
2857
 
 
2858
    _fmt = ('Working tree "%(display_url)s" has shelved changes'
 
2859
            ' (See bzr shelve --list).%(more)s')
 
2860
 
 
2861
 
2820
2862
class MissingTemplateVariable(BzrError):
2821
2863
 
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.
 
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.
2945
2990
    """
2946
2991
 
2947
2992
    _fmt = ("Hook '%(hook_name)s' during %(hook_stage)s failed:\n"
2948
2993
            "%(traceback_text)s%(exc_value)s")
2949
2994
 
2950
 
    def __init__(self, hook_stage, hook_name, exc_info):
 
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)
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
 
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