~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/errors.py

Hacking notes on TDD

Show diffs side-by-side

added added

removed removed

Lines of Context:
142
142
    # Error from malformed user command
143
143
    # This is being misused as a generic exception
144
144
    # pleae subclass. RBC 20051030
145
 
    #
146
 
    # I think it's a waste of effort to differentiate between errors that
147
 
    # are not intended to be caught anyway.  UI code need not subclass
148
 
    # BzrCommandError, and non-UI code should not throw a subclass of
149
 
    # BzrCommandError.  ADHB 20051211
150
145
    def __str__(self):
151
146
        return self.args[0]
152
147
 
158
153
class StrictCommitFailed(Exception):
159
154
    """Commit refused because there are unknowns in the tree."""
160
155
 
161
 
 
162
 
class PathError(BzrNewError):
163
 
    """Generic path error: %(path)r%(extra)s)"""
164
 
    def __init__(self, path, extra=None):
165
 
        BzrNewError.__init__(self)
166
 
        self.path = path
167
 
        if extra:
168
 
            self.extra = ': ' + str(extra)
169
 
        else:
170
 
            self.extra = ''
171
 
 
172
 
 
173
 
class NoSuchFile(PathError):
174
 
    """No such file: %(path)r%(extra)s"""
175
 
 
176
 
 
177
 
class FileExists(PathError):
178
 
    """File exists: %(path)r%(extra)s"""
179
 
 
180
 
 
181
 
class PermissionDenied(PathError):
182
 
    """Permission denied: %(path)r%(extra)s"""
183
 
 
184
 
 
185
 
class PathNotChild(BzrNewError):
186
 
    """Path %(path)r is not a child of path %(base)r%(extra)s"""
187
 
    def __init__(self, path, base, extra=None):
188
 
        BzrNewError.__init__(self)
189
 
        self.path = path
190
 
        self.base = base
191
 
        if extra:
192
 
            self.extra = ': ' + str(extra)
193
 
        else:
194
 
            self.extra = ''
195
 
 
196
 
 
197
156
class NotBranchError(BzrNewError):
198
157
    """Not a branch: %(path)s"""
199
158
    def __init__(self, path):
276
235
 
277
236
class DivergedBranches(BzrError):
278
237
    def __init__(self, branch1, branch2):
279
 
        BzrError.__init__(self, "These branches have diverged.  Try merge.")
 
238
        BzrError.__init__(self, "These branches have diverged.")
280
239
        self.branch1 = branch1
281
240
        self.branch2 = branch2
282
241
 
370
329
    """Parents are mismatched between two revisions."""
371
330
    
372
331
 
373
 
class NoSuchExportFormat(BzrNewError):
374
 
    """Export format %(format)r not supported"""
375
 
    def __init__(self, format):
376
 
        BzrNewError.__init__(self)
377
 
        self.format = format
378
 
 
379
 
 
380
332
class TransportError(BzrError):
381
333
    """All errors thrown by Transport implementations should derive
382
334
    from this class.
395
347
    """
396
348
    pass
397
349
 
398
 
 
399
 
class ConnectionError(TransportError):
400
 
    """A connection problem prevents file retrieval.
 
350
class NonRelativePath(TransportError):
 
351
    """An absolute path was supplied, that could not be decoded into
 
352
    a relative path.
 
353
    """
 
354
    pass
 
355
 
 
356
class NoSuchFile(TransportError, IOError):
 
357
    """A get() was issued for a file that doesn't exist."""
 
358
 
 
359
    # XXX: Is multiple inheritance for exceptions really needed?
 
360
 
 
361
    def __str__(self):
 
362
        return 'no such file: ' + self.msg
 
363
 
 
364
    def __init__(self, msg=None, orig_error=None):
 
365
        import errno
 
366
        TransportError.__init__(self, msg=msg, orig_error=orig_error)
 
367
        IOError.__init__(self, errno.ENOENT, self.msg)
 
368
 
 
369
class ConnectionError(TransportError, IOError):
 
370
    """
 
371
    A connection problem prevents file retrieval.
401
372
    This does not indicate whether the file exists or not; it indicates that a
402
373
    precondition for requesting the file was not met.
403
374
    """
404
 
    def __init__(self, msg=None, orig_error=None):
405
 
        TransportError.__init__(self, msg=msg, orig_error=orig_error)
406
 
 
 
375
 
 
376
    # XXX: Is multiple inheritance for exceptions really needed?
 
377
 
 
378
    def __str__(self):
 
379
        return 'connection error: ' + self.msg
 
380
 
 
381
    def __init__(self, msg=None, orig_error=None):
 
382
        import errno
 
383
        TransportError.__init__(self, msg=msg, orig_error=orig_error)
 
384
        IOError.__init__(self, errno.ENOENT, self.msg)
 
385
 
 
386
 
 
387
class FileExists(TransportError, OSError):
 
388
    """An operation was attempted, which would overwrite an entry,
 
389
    but overwritting is not supported.
 
390
 
 
391
    mkdir() can throw this, but put() just overwites existing files.
 
392
    """
 
393
    # XXX: Is multiple inheritance for exceptions really needed?
 
394
    def __init__(self, msg=None, orig_error=None):
 
395
        import errno
 
396
        TransportError.__init__(self, msg=msg, orig_error=orig_error)
 
397
        OSError.__init__(self, errno.EEXIST, self.msg)
 
398
 
 
399
class PermissionDenied(TransportError):
 
400
    """An operation cannot succeed because of a lack of permissions."""
 
401
    pass
407
402
 
408
403
class ConnectionReset(TransportError):
409
404
    """The connection has been closed."""