/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/errors.py

  • Committer: Andrew Bennetts
  • Date: 2010-09-06 06:13:52 UTC
  • mto: (4634.158.5 2.0)
  • mto: This revision was merged to the branch mainline in revision 5419.
  • Revision ID: andrew.bennetts@canonical.com-20100906061352-ef2rw40pa5wte5oj
Add LockCorrupt error, and use it to provide nicer handling of unparseable lock/held/info files.

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
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):
1075
1054
        self.target = target
1076
1055
 
1077
1056
 
 
1057
class LockCorrupt(LockError):
 
1058
 
 
1059
    _fmt = ("Lock is apparently held, but corrupted: %(corruption_info)s\n"
 
1060
            "Use 'bzr break-lock' to clear it")
 
1061
 
 
1062
    internal_error = False
 
1063
 
 
1064
    def __init__(self, corruption_info, file_data=None):
 
1065
        self.corruption_info = corruption_info
 
1066
        self.file_data = file_data
 
1067
 
 
1068
 
1078
1069
class LockNotHeld(LockError):
1079
1070
 
1080
1071
    _fmt = "Lock not held: %(lock)s"
1179
1170
 
1180
1171
class InvalidRevisionSpec(BzrError):
1181
1172
 
1182
 
    _fmt = ("Requested revision: '%(spec)s' does not exist in branch:"
 
1173
    _fmt = ("Requested revision: %(spec)r does not exist in branch:"
1183
1174
            " %(branch)s%(extra)s")
1184
1175
 
1185
1176
    def __init__(self, spec, branch, extra=None):
1268
1259
class AmbiguousBase(BzrError):
1269
1260
 
1270
1261
    def __init__(self, bases):
1271
 
        symbol_versioning.warn("BzrError AmbiguousBase has been deprecated "
1272
 
            "as of bzrlib 0.8.", DeprecationWarning, stacklevel=2)
 
1262
        warn("BzrError AmbiguousBase has been deprecated as of bzrlib 0.8.",
 
1263
                DeprecationWarning)
1273
1264
        msg = ("The correct base is unclear, because %s are all equally close"
1274
1265
                % ", ".join(bases))
1275
1266
        BzrError.__init__(self, msg)
1297
1288
class BoundBranchOutOfDate(BzrError):
1298
1289
 
1299
1290
    _fmt = ("Bound branch %(branch)s is out of date with master branch"
1300
 
            " %(master)s.%(extra_help)s")
 
1291
            " %(master)s.")
1301
1292
 
1302
1293
    def __init__(self, branch, master):
1303
1294
        BzrError.__init__(self)
1304
1295
        self.branch = branch
1305
1296
        self.master = master
1306
 
        self.extra_help = ''
1307
1297
 
1308
1298
 
1309
1299
class CommitToDoubleBoundBranch(BzrError):
2176
2166
 
2177
2167
    def __init__(self, repo):
2178
2168
        BzrError.__init__(self)
2179
 
        self.repo_path = repo.user_url
 
2169
        self.repo_path = repo.bzrdir.root_transport.base
2180
2170
 
2181
2171
 
2182
2172
class InconsistentDelta(BzrError):
2754
2744
 
2755
2745
    def __init__(self, bzrdir):
2756
2746
        import bzrlib.urlutils as urlutils
2757
 
        display_url = urlutils.unescape_for_display(bzrdir.user_url,
 
2747
        display_url = urlutils.unescape_for_display(bzrdir.root_transport.base,
2758
2748
                                                    'ascii')
2759
2749
        BzrError.__init__(self, bzrdir=bzrdir, display_url=display_url)
2760
2750
 
2835
2825
            more = ' ' + more
2836
2826
        import bzrlib.urlutils as urlutils
2837
2827
        display_url = urlutils.unescape_for_display(
2838
 
            tree.user_url, 'ascii')
 
2828
            tree.bzrdir.root_transport.base, 'ascii')
2839
2829
        BzrError.__init__(self, tree=tree, display_url=display_url, more=more)
2840
2830
 
2841
2831
 
2964
2954
class HookFailed(BzrError):
2965
2955
    """Raised when a pre_change_branch_tip hook function fails anything other
2966
2956
    than TipChangeRejected.
2967
 
 
2968
 
    Note that this exception is no longer raised, and the import is only left
2969
 
    to be nice to code which might catch it in a plugin.
2970
2957
    """
2971
2958
 
2972
2959
    _fmt = ("Hook '%(hook_name)s' during %(hook_stage)s failed:\n"
2973
2960
            "%(traceback_text)s%(exc_value)s")
2974
2961
 
2975
 
    def __init__(self, hook_stage, hook_name, exc_info, warn=True):
2976
 
        if warn:
2977
 
            symbol_versioning.warn("BzrError HookFailed has been deprecated "
2978
 
                "as of bzrlib 2.1.", DeprecationWarning, stacklevel=2)
 
2962
    def __init__(self, hook_stage, hook_name, exc_info):
2979
2963
        import traceback
2980
2964
        self.hook_stage = hook_stage
2981
2965
        self.hook_name = hook_name
3103
3087
    def __init__(self, source_branch, target_branch):
3104
3088
        self.source_branch = source_branch
3105
3089
        self.target_branch = target_branch
3106
 
 
3107
 
 
3108
 
class NoRoundtrippingSupport(BzrError):
3109
 
 
3110
 
    _fmt = ("Roundtripping is not supported between %(source_branch)r and "
3111
 
            "%(target_branch)r.")
3112
 
 
3113
 
    internal_error = True
3114
 
 
3115
 
    def __init__(self, source_branch, target_branch):
3116
 
        self.source_branch = source_branch
3117
 
        self.target_branch = target_branch
3118
 
 
3119
 
 
3120
 
class FileTimestampUnavailable(BzrError):
3121
 
 
3122
 
    _fmt = "The filestamp for %(path)s is not available."
3123
 
 
3124
 
    internal_error = True
3125
 
 
3126
 
    def __init__(self, path):
3127
 
        self.path = path
3128
 
 
3129
 
 
3130
 
class NoColocatedBranchSupport(BzrError):
3131
 
 
3132
 
    _fmt = ("%(bzrdir)r does not support co-located branches.")
3133
 
 
3134
 
    def __init__(self, bzrdir):
3135
 
        self.bzrdir = bzrdir
3136