~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/errors.py

Abbreviate pack_stat struct format to '>6L'

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
from bzrlib import (
21
21
    osutils,
22
22
    symbol_versioning,
 
23
    i18n,
 
24
    trace,
23
25
    )
 
26
from bzrlib.i18n import gettext
24
27
from bzrlib.patches import (
25
28
    MalformedHunkHeader,
26
29
    MalformedLine,
54
57
    Base class for errors raised by bzrlib.
55
58
 
56
59
    :cvar internal_error: if True this was probably caused by a bzr bug and
57
 
    should be displayed with a traceback; if False (or absent) this was
58
 
    probably a user or environment error and they don't need the gory details.
59
 
    (That can be overridden by -Derror on the command line.)
 
60
        should be displayed with a traceback; if False (or absent) this was
 
61
        probably a user or environment error and they don't need the gory
 
62
        details.  (That can be overridden by -Derror on the command line.)
60
63
 
61
64
    :cvar _fmt: Format string to display the error; this is expanded
62
 
    by the instance's dict.
 
65
        by the instance's dict.
63
66
    """
64
67
 
65
68
    internal_error = False
140
143
        """Return format string for this exception or None"""
141
144
        fmt = getattr(self, '_fmt', None)
142
145
        if fmt is not None:
143
 
            return fmt
 
146
            i18n.install()
 
147
            unicode_fmt = unicode(fmt) #_fmt strings should be ascii
 
148
            if type(fmt) == unicode:
 
149
                trace.mutter("Unicode strings in error.fmt are deprecated")
 
150
            return gettext(unicode_fmt)
144
151
        fmt = getattr(self, '__doc__', None)
145
152
        if fmt is not None:
146
153
            symbol_versioning.warn("%s uses its docstring as a format, "
304
311
class RootMissing(InternalBzrError):
305
312
 
306
313
    _fmt = ("The root entry of a tree must be the first entry supplied to "
307
 
        "record_entry_contents.")
 
314
        "the commit builder.")
308
315
 
309
316
 
310
317
class NoPublicBranch(BzrError):
621
628
 
622
629
    _fmt = 'Unsupported protocol for url "%(path)s"%(extra)s'
623
630
 
624
 
    def __init__(self, url, extra):
 
631
    def __init__(self, url, extra=""):
625
632
        PathError.__init__(self, url, extra=extra)
626
633
 
627
634
 
864
871
        """Construct a new AlreadyVersionedError.
865
872
 
866
873
        :param path: This is the path which is versioned,
867
 
        which should be in a user friendly form.
 
874
            which should be in a user friendly form.
868
875
        :param context_info: If given, this is information about the context,
869
 
        which could explain why this is expected to not be versioned.
 
876
            which could explain why this is expected to not be versioned.
870
877
        """
871
878
        BzrError.__init__(self)
872
879
        self.path = path
885
892
        """Construct a new NotVersionedError.
886
893
 
887
894
        :param path: This is the path which is not versioned,
888
 
        which should be in a user friendly form.
 
895
            which should be in a user friendly form.
889
896
        :param context_info: If given, this is information about the context,
890
 
        which could explain why this is expected to be versioned.
 
897
            which could explain why this is expected to be versioned.
891
898
        """
892
899
        BzrError.__init__(self)
893
900
        self.path = path
1715
1722
 
1716
1723
class InvalidHttpResponse(TransportError):
1717
1724
 
1718
 
    _fmt = "Invalid http response for %(path)s: %(msg)s"
 
1725
    _fmt = "Invalid http response for %(path)s: %(msg)s%(orig_error)s"
1719
1726
 
1720
1727
    def __init__(self, path, msg, orig_error=None):
1721
1728
        self.path = path
 
1729
        if orig_error is None:
 
1730
            orig_error = ''
 
1731
        else:
 
1732
            # This is reached for obscure and unusual errors so we want to
 
1733
            # preserve as much info as possible to ease debug.
 
1734
            orig_error = ': %r' % (orig_error,)
1722
1735
        TransportError.__init__(self, msg, orig_error=orig_error)
1723
1736
 
1724
1737
 
1731
1744
        InvalidHttpResponse.__init__(self, path, msg)
1732
1745
 
1733
1746
 
 
1747
class HttpBoundaryMissing(InvalidHttpResponse):
 
1748
    """A multipart response ends with no boundary marker.
 
1749
 
 
1750
    This is a special case caused by buggy proxies, described in
 
1751
    <https://bugs.launchpad.net/bzr/+bug/198646>.
 
1752
    """
 
1753
 
 
1754
    _fmt = "HTTP MIME Boundary missing for %(path)s: %(msg)s"
 
1755
 
 
1756
    def __init__(self, path, msg):
 
1757
        InvalidHttpResponse.__init__(self, path, msg)
 
1758
 
 
1759
 
1734
1760
class InvalidHttpContentType(InvalidHttpResponse):
1735
1761
 
1736
1762
    _fmt = 'Invalid http Content-type "%(ctype)s" for %(path)s: %(msg)s'
1764
1790
    _fmt = "Working tree has conflicts."
1765
1791
 
1766
1792
 
 
1793
class ConfigContentError(BzrError):
 
1794
 
 
1795
    _fmt = "Config file %(filename)s is not UTF-8 encoded\n"
 
1796
 
 
1797
    def __init__(self, filename):
 
1798
        BzrError.__init__(self)
 
1799
        self.filename = filename
 
1800
 
 
1801
 
1767
1802
class ParseConfigError(BzrError):
1768
1803
 
1769
1804
    _fmt = "Error(s) parsing config file %(filename)s:\n%(errors)s"
1774
1809
        self.errors = '\n'.join(e.msg for e in errors)
1775
1810
 
1776
1811
 
 
1812
class ConfigOptionValueError(BzrError):
 
1813
 
 
1814
    _fmt = """Bad value "%(value)s" for option "%(name)s"."""
 
1815
 
 
1816
    def __init__(self, name, value):
 
1817
        BzrError.__init__(self, name=name, value=value)
 
1818
 
 
1819
 
1777
1820
class NoEmailInUsername(BzrError):
1778
1821
 
1779
1822
    _fmt = "%(username)r does not seem to contain a reasonable email address"
1785
1828
 
1786
1829
class SigningFailed(BzrError):
1787
1830
 
1788
 
    _fmt = 'Failed to gpg sign data with command "%(command_line)s"'
 
1831
    _fmt = 'Failed to GPG sign data with command "%(command_line)s"'
1789
1832
 
1790
1833
    def __init__(self, command_line):
1791
1834
        BzrError.__init__(self, command_line=command_line)
1792
1835
 
1793
1836
 
 
1837
class SignatureVerificationFailed(BzrError):
 
1838
 
 
1839
    _fmt = 'Failed to verify GPG signature data with error "%(error)s"'
 
1840
 
 
1841
    def __init__(self, error):
 
1842
        BzrError.__init__(self, error=error)
 
1843
 
 
1844
 
 
1845
class DependencyNotPresent(BzrError):
 
1846
 
 
1847
    _fmt = 'Unable to import library "%(library)s": %(error)s'
 
1848
 
 
1849
    def __init__(self, library, error):
 
1850
        BzrError.__init__(self, library=library, error=error)
 
1851
 
 
1852
 
 
1853
class GpgmeNotInstalled(DependencyNotPresent):
 
1854
 
 
1855
    _fmt = 'python-gpgme is not installed, it is needed to verify signatures'
 
1856
 
 
1857
    def __init__(self, error):
 
1858
        DependencyNotPresent.__init__(self, 'gpgme', error)
 
1859
 
 
1860
 
1794
1861
class WorkingTreeNotRevision(BzrError):
1795
1862
 
1796
1863
    _fmt = ("The working tree for %(basedir)s has changed since"
2049
2116
    _fmt = "Parameter %(param)s contains a newline."
2050
2117
 
2051
2118
 
2052
 
class DependencyNotPresent(BzrError):
2053
 
 
2054
 
    _fmt = 'Unable to import library "%(library)s": %(error)s'
2055
 
 
2056
 
    def __init__(self, library, error):
2057
 
        BzrError.__init__(self, library=library, error=error)
2058
 
 
2059
 
 
2060
2119
class ParamikoNotPresent(DependencyNotPresent):
2061
2120
 
2062
2121
    _fmt = "Unable to import paramiko (required for sftp support): %(error)s"
2297
2356
    """
2298
2357
 
2299
2358
 
 
2359
class GhostTagsNotSupported(BzrError):
 
2360
 
 
2361
    _fmt = "Ghost tags not supported by format %(format)r."
 
2362
 
 
2363
    def __init__(self, format):
 
2364
        self.format = format
 
2365
 
 
2366
 
2300
2367
class BinaryFile(BzrError):
2301
2368
 
2302
2369
    _fmt = "File is binary but should be text."
2665
2732
 
2666
2733
    This is distinct from ErrorFromSmartServer so that it is possible to
2667
2734
    distinguish between the following two cases:
2668
 
      - ErrorFromSmartServer was uncaught.  This is logic error in the client
2669
 
        and so should provoke a traceback to the user.
2670
 
      - ErrorFromSmartServer was caught but its error_tuple could not be
2671
 
        translated.  This is probably because the server sent us garbage, and
2672
 
        should not provoke a traceback.
 
2735
 
 
2736
    - ErrorFromSmartServer was uncaught.  This is logic error in the client
 
2737
      and so should provoke a traceback to the user.
 
2738
    - ErrorFromSmartServer was caught but its error_tuple could not be
 
2739
      translated.  This is probably because the server sent us garbage, and
 
2740
      should not provoke a traceback.
2673
2741
    """
2674
2742
 
2675
2743
    _fmt = "Server sent an unexpected error: %(error_tuple)r"
2731
2799
    _fmt = "Container has multiple records with the same name: %(name)s"
2732
2800
 
2733
2801
    def __init__(self, name):
2734
 
        self.name = name
 
2802
        self.name = name.decode("utf-8")
2735
2803
 
2736
2804
 
2737
2805
class NoDestinationAddress(InternalBzrError):
3074
3142
    _fmt = "Shelf corrupt."
3075
3143
 
3076
3144
 
 
3145
class DecompressCorruption(BzrError):
 
3146
 
 
3147
    _fmt = "Corruption while decompressing repository file%(orig_error)s"
 
3148
 
 
3149
    def __init__(self, orig_error=None):
 
3150
        if orig_error is not None:
 
3151
            self.orig_error = ", %s" % (orig_error,)
 
3152
        else:
 
3153
            self.orig_error = ""
 
3154
        BzrError.__init__(self)
 
3155
 
 
3156
 
3077
3157
class NoSuchShelfId(BzrError):
3078
3158
 
3079
3159
    _fmt = 'No changes are shelved with id "%(shelf_id)d".'
3259
3339
    def __init__(self, source, target):
3260
3340
        self.source = source
3261
3341
        self.target = target
 
3342
 
 
3343
 
 
3344
class HpssVfsRequestNotAllowed(BzrError):
 
3345
 
 
3346
    _fmt = ("VFS requests over the smart server are not allowed. Encountered: "
 
3347
            "%(method)s, %(arguments)s.")
 
3348
 
 
3349
    def __init__(self, method, arguments):
 
3350
        self.method = method
 
3351
        self.arguments = arguments