~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/errors.py

  • Committer: John Arbash Meinel
  • Date: 2005-09-22 19:16:57 UTC
  • mto: (1393.2.1)
  • mto: This revision was merged to the branch mainline in revision 1396.
  • Revision ID: john@arbash-meinel.com-20050922191657-f94ee98ba0f9f83e
Made it so that we don't loop forever on EAGAIN.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#! /usr/bin/env python
2
1
# -*- coding: UTF-8 -*-
3
2
 
4
3
# This program is free software; you can redistribute it and/or modify
25
24
class BzrError(StandardError):
26
25
    pass
27
26
 
 
27
 
28
28
class BzrCheckError(BzrError):
29
29
    pass
30
30
 
31
31
 
32
 
 
33
 
 
34
 
def bailout(msg, explanation=[]):
35
 
    ex = BzrError(msg, explanation)
36
 
    import trace
37
 
    trace._tracefile.write('* raising %s\n' % ex)
38
 
    raise ex
 
32
class InvalidRevisionNumber(BzrError):
 
33
    def __init__(self, revno):
 
34
        self.args = [revno]
 
35
        
 
36
    def __str__(self):
 
37
        return 'invalid revision number: %r' % self.args[0]
 
38
 
 
39
 
 
40
class InvalidRevisionId(BzrError):
 
41
    pass
 
42
 
 
43
 
 
44
class BzrCommandError(BzrError):
 
45
    # Error from malformed user command
 
46
    pass
 
47
 
 
48
 
 
49
class NotBranchError(BzrError):
 
50
    """Specified path is not in a branch"""
 
51
    pass
 
52
 
 
53
 
 
54
class NotVersionedError(BzrError):
 
55
    """Specified object is not versioned."""
 
56
 
 
57
 
 
58
class BadFileKindError(BzrError):
 
59
    """Specified file is of a kind that cannot be added.
 
60
 
 
61
    (For example a symlink or device file.)"""
 
62
    pass
 
63
 
 
64
 
 
65
class ForbiddenFileError(BzrError):
 
66
    """Cannot operate on a file because it is a control file."""
 
67
    pass
 
68
 
 
69
 
 
70
class LockError(Exception):
 
71
    """All exceptions from the lock/unlock functions should be from
 
72
    this exception class.  They will be translated as necessary. The
 
73
    original exception is available as e.original_error
 
74
    """
 
75
    def __init__(self, e=None):
 
76
        self.original_error = e
 
77
        if e:
 
78
            Exception.__init__(self, e)
 
79
        else:
 
80
            Exception.__init__(self)
 
81
 
 
82
 
 
83
class PointlessCommit(Exception):
 
84
    """Commit failed because nothing was changed."""
 
85
 
 
86
 
 
87
class NoSuchRevision(BzrError):
 
88
    def __init__(self, branch, revision):
 
89
        self.branch = branch
 
90
        self.revision = revision
 
91
        msg = "Branch %s has no revision %s" % (branch, revision)
 
92
        BzrError.__init__(self, msg)
 
93
 
 
94
 
 
95
class DivergedBranches(BzrError):
 
96
    def __init__(self, branch1, branch2):
 
97
        BzrError.__init__(self, "These branches have diverged.")
 
98
        self.branch1 = branch1
 
99
        self.branch2 = branch2
 
100
 
 
101
class UnrelatedBranches(BzrCommandError):
 
102
    def __init__(self):
 
103
        msg = "Branches have no common ancestor, and no base revision"\
 
104
            " specified."
 
105
        BzrCommandError.__init__(self, msg)
 
106
 
 
107
class NoCommonAncestor(BzrError):
 
108
    def __init__(self, revision_a, revision_b):
 
109
        msg = "Revisions have no common ancestor: %s %s." \
 
110
            % (revision_a, revision_b) 
 
111
        BzrError.__init__(self, msg)
 
112
 
 
113
class NoCommonRoot(BzrError):
 
114
    def __init__(self, revision_a, revision_b):
 
115
        msg = "Revisions are not derived from the same root: %s %s." \
 
116
            % (revision_a, revision_b) 
 
117
        BzrError.__init__(self, msg)
 
118
 
 
119
class NotAncestor(BzrError):
 
120
    def __init__(self, rev_id, not_ancestor_id):
 
121
        msg = "Revision %s is not an ancestor of %s" % (not_ancestor_id, 
 
122
                                                        rev_id)
 
123
        BzrError.__init__(self, msg)
 
124
        self.rev_id = rev_id
 
125
        self.not_ancestor_id = not_ancestor_id
 
126
 
 
127
 
 
128
class InstallFailed(BzrError):
 
129
    def __init__(self, revisions):
 
130
        msg = "Could not install revisions:\n%s" % " ,".join(revisions)
 
131
        BzrError.__init__(self, msg)
 
132
        self.revisions = revisions
 
133
 
 
134
 
 
135
class AmbiguousBase(BzrError):
 
136
    def __init__(self, bases):
 
137
        msg = "The correct base is unclear, becase %s are all equally close" %\
 
138
            ", ".join(bases)
 
139
        BzrError.__init__(self, msg)
 
140
        self.bases = bases
 
141
 
 
142
class NoCommits(BzrError):
 
143
    def __init__(self, branch):
 
144
        msg = "Branch %s has no commits." % branch
 
145
        BzrError.__init__(self, msg)
 
146
 
 
147
class TransportError(BzrError):
 
148
    """All errors thrown by Transport implementations should derive
 
149
    from this class.
 
150
    """
 
151
    def __init__(self, msg=None, orig_error=None):
 
152
        if msg is None and orig_error is not None:
 
153
            msg = str(orig_error)
 
154
        BzrError.__init__(self, msg)
 
155
        self.msg = msg
 
156
        self.orig_error = orig_error
 
157
 
 
158
# A set of semi-meaningful errors which can be thrown
 
159
class TransportNotPossible(TransportError):
 
160
    """This is for transports where a specific function is explicitly not
 
161
    possible. Such as pushing files to an HTTP server.
 
162
    """
 
163
    pass
 
164
 
 
165
class NonRelativePath(TransportError):
 
166
    """An absolute path was supplied, that could not be decoded into
 
167
    a relative path.
 
168
    """
 
169
    pass
 
170
 
 
171
class NoSuchFile(TransportError, IOError):
 
172
    """A get() was issued for a file that doesn't exist."""
 
173
    def __init__(self, msg=None, orig_error=None):
 
174
        import errno
 
175
        TransportError.__init__(self, msg=msg, orig_error=orig_error)
 
176
        IOError.__init__(self, errno.ENOENT, self.msg)
 
177
 
 
178
class FileExists(TransportError, OSError):
 
179
    """An operation was attempted, which would overwrite an entry,
 
180
    but overwritting is not supported.
 
181
 
 
182
    mkdir() can throw this, but put() just overwites existing files.
 
183
    """
 
184
    def __init__(self, msg=None, orig_error=None):
 
185
        import errno
 
186
        TransportError.__init__(self, msg=msg, orig_error=orig_error)
 
187
        OSError.__init__(self, errno.EEXIST, self.msg)
 
188
 
 
189
class PermissionDenied(TransportError):
 
190
    """An operation cannot succeed because of a lack of permissions."""
 
191
    pass
 
192
 
 
193
class ConnectionReset(TransportError):
 
194
    """The connection has been closed."""
 
195
    pass
39
196