~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/errors.py

  • Committer: John Arbash Meinel
  • Date: 2010-02-17 17:11:16 UTC
  • mfrom: (4797.2.17 2.1)
  • mto: (4797.2.18 2.1)
  • mto: This revision was merged to the branch mainline in revision 5055.
  • Revision ID: john@arbash-meinel.com-20100217171116-h7t9223ystbnx5h8
merge bzr.2.1 in preparation for NEWS entry.

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
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):
1247
1268
class AmbiguousBase(BzrError):
1248
1269
 
1249
1270
    def __init__(self, bases):
1250
 
        warn("BzrError AmbiguousBase has been deprecated as of bzrlib 0.8.",
1251
 
                DeprecationWarning)
 
1271
        symbol_versioning.warn("BzrError AmbiguousBase has been deprecated "
 
1272
            "as of bzrlib 0.8.", DeprecationWarning, stacklevel=2)
1252
1273
        msg = ("The correct base is unclear, because %s are all equally close"
1253
1274
                % ", ".join(bases))
1254
1275
        BzrError.__init__(self, msg)
2942
2963
class HookFailed(BzrError):
2943
2964
    """Raised when a pre_change_branch_tip hook function fails anything other
2944
2965
    than TipChangeRejected.
 
2966
 
 
2967
    Note that this exception is no longer raised, and the import is only left
 
2968
    to be nice to code which might catch it in a plugin.
2945
2969
    """
2946
2970
 
2947
2971
    _fmt = ("Hook '%(hook_name)s' during %(hook_stage)s failed:\n"
2948
2972
            "%(traceback_text)s%(exc_value)s")
2949
2973
 
2950
 
    def __init__(self, hook_stage, hook_name, exc_info):
 
2974
    def __init__(self, hook_stage, hook_name, exc_info, warn=True):
 
2975
        if warn:
 
2976
            symbol_versioning.warn("BzrError HookFailed has been deprecated "
 
2977
                "as of bzrlib 2.1.", DeprecationWarning, stacklevel=2)
2951
2978
        import traceback
2952
2979
        self.hook_stage = hook_stage
2953
2980
        self.hook_name = hook_name
3075
3102
    def __init__(self, source_branch, target_branch):
3076
3103
        self.source_branch = source_branch
3077
3104
        self.target_branch = target_branch
 
3105
 
 
3106
 
 
3107
class NoRoundtrippingSupport(BzrError):
 
3108
 
 
3109
    _fmt = ("Roundtripping is not supported between %(source_branch)r and "
 
3110
            "%(target_branch)r.")
 
3111
 
 
3112
    internal_error = True
 
3113
 
 
3114
    def __init__(self, source_branch, target_branch):
 
3115
        self.source_branch = source_branch
 
3116
        self.target_branch = target_branch
 
3117
 
 
3118
 
 
3119
class FileTimestampUnavailable(BzrError):
 
3120
 
 
3121
    _fmt = "The filestamp for %(path)s is not available."
 
3122
 
 
3123
    internal_error = True
 
3124
 
 
3125
    def __init__(self, path):
 
3126
        self.path = path