~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/errors.py

Merged bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
18
18
"""
19
19
 
20
20
 
21
 
from bzrlib import symbol_versioning
22
 
from bzrlib.patches import (PatchSyntax, 
23
 
                            PatchConflict, 
24
 
                            MalformedPatchHeader,
25
 
                            MalformedHunkHeader,
26
 
                            MalformedLine,)
 
21
from bzrlib import (
 
22
    osutils,
 
23
    symbol_versioning,
 
24
    )
 
25
from bzrlib.patches import (
 
26
    MalformedHunkHeader,
 
27
    MalformedLine,
 
28
    MalformedPatchHeader,
 
29
    PatchConflict,
 
30
    PatchSyntax,
 
31
    )
27
32
 
28
33
 
29
34
# TODO: is there any value in providing the .args field used by standard
199
204
        self.revision_id = revision_id
200
205
        self.branch = branch
201
206
 
 
207
class ReservedId(BzrError):
 
208
 
 
209
    _fmt = "Reserved revision-id {%(revision_id)s}"
 
210
 
 
211
    def __init__(self, revision_id):
 
212
        self.revision_id = revision_id
202
213
 
203
214
class NoSuchId(BzrError):
204
215
 
288
299
 
289
300
    _fmt = "Error in command line options"
290
301
 
 
302
 
 
303
class BadOptionValue(BzrError):
 
304
 
 
305
    _fmt = """Bad value "%(value)s" for option "%(name)s"."""
 
306
 
 
307
    def __init__(self, name, value):
 
308
        BzrError.__init__(self, name=name, value=value)
 
309
 
291
310
    
292
311
class StrictCommitFailed(BzrError):
293
312
 
319
338
    _fmt = "File exists: %(path)r%(extra)s"
320
339
 
321
340
 
 
341
class RenameFailedFilesExist(BzrError):
 
342
    """Used when renaming and both source and dest exist."""
 
343
 
 
344
    _fmt = ("Could not rename %(source)s => %(dest)s because both files exist."
 
345
         "%(extra)s")
 
346
 
 
347
    def __init__(self, source, dest, extra=None):
 
348
        BzrError.__init__(self)
 
349
        self.source = str(source)
 
350
        self.dest = str(dest)
 
351
        if extra:
 
352
            self.extra = ' ' + str(extra)
 
353
        else:
 
354
            self.extra = ''
 
355
 
 
356
 
 
357
class NotADirectory(PathError):
 
358
 
 
359
    _fmt = "%(path)r is not a directory %(extra)s"
 
360
 
 
361
 
 
362
class NotInWorkingDirectory(PathError):
 
363
 
 
364
    _fmt = "%(path)r is not in the working directory %(extra)s"
 
365
 
 
366
 
322
367
class DirectoryNotEmpty(PathError):
323
368
 
324
369
    _fmt = "Directory not empty: %(path)r%(extra)s"
360
405
        self.args = [base] + list(args)
361
406
 
362
407
 
 
408
class UnknownHook(BzrError):
 
409
 
 
410
    _fmt = "The %(type)s hook '%(hook)s' is unknown in this version of bzrlib."
 
411
 
 
412
    def __init__(self, hook_type, hook_name):
 
413
        BzrError.__init__(self)
 
414
        self.type = hook_type
 
415
        self.hook = hook_name
 
416
 
 
417
 
363
418
class UnsupportedProtocol(PathError):
364
419
 
365
420
    _fmt = 'Unsupported protocol for url "%(path)s"%(extra)s'
491
546
        self.repo_format = repo_format
492
547
 
493
548
 
 
549
class AlreadyVersionedError(BzrError):
 
550
    """Used when a path is expected not to be versioned, but it is."""
 
551
 
 
552
    _fmt = "%(context_info)s%(path)s is already versioned"
 
553
 
 
554
    def __init__(self, path, context_info=None):
 
555
        """Construct a new NotVersionedError.
 
556
 
 
557
        :param path: This is the path which is versioned,
 
558
        which should be in a user friendly form.
 
559
        :param context_info: If given, this is information about the context,
 
560
        which could explain why this is expected to not be versioned.
 
561
        """
 
562
        BzrError.__init__(self)
 
563
        self.path = path
 
564
        if context_info is None:
 
565
            self.context_info = ''
 
566
        else:
 
567
            self.context_info = context_info + ". "
 
568
 
 
569
 
494
570
class NotVersionedError(BzrError):
495
 
 
496
 
    _fmt = "%(path)s is not versioned"
497
 
 
498
 
    def __init__(self, path):
 
571
    """Used when a path is expected to be versioned, but it is not."""
 
572
 
 
573
    _fmt = "%(context_info)s%(path)s is not versioned"
 
574
 
 
575
    def __init__(self, path, context_info=None):
 
576
        """Construct a new NotVersionedError.
 
577
 
 
578
        :param path: This is the path which is not versioned,
 
579
        which should be in a user friendly form.
 
580
        :param context_info: If given, this is information about the context,
 
581
        which could explain why this is expected to be versioned.
 
582
        """
499
583
        BzrError.__init__(self)
500
584
        self.path = path
 
585
        if context_info is None:
 
586
            self.context_info = ''
 
587
        else:
 
588
            self.context_info = context_info + ". "
501
589
 
502
590
 
503
591
class PathsNotVersionedError(BzrError):
504
 
    # used when reporting several paths are not versioned
 
592
    """Used when reporting several paths which are not versioned"""
505
593
 
506
594
    _fmt = "Path(s) are not versioned: %(paths_as_string)s"
507
595
 
514
602
 
515
603
class PathsDoNotExist(BzrError):
516
604
 
517
 
    _fmt = "Path(s) do not exist: %(paths_as_string)s"
 
605
    _fmt = "Path(s) do not exist: %(paths_as_string)s%(extra)s"
518
606
 
519
607
    # used when reporting that paths are neither versioned nor in the working
520
608
    # tree
521
609
 
522
 
    def __init__(self, paths):
 
610
    def __init__(self, paths, extra=None):
523
611
        # circular import
524
612
        from bzrlib.osutils import quotefn
525
613
        BzrError.__init__(self)
526
614
        self.paths = paths
527
615
        self.paths_as_string = ' '.join([quotefn(p) for p in paths])
 
616
        if extra:
 
617
            self.extra = ': ' + str(extra)
 
618
        else:
 
619
            self.extra = ''
528
620
 
529
621
 
530
622
class BadFileKindError(BzrError):
541
633
 
542
634
    _fmt = "Lock error: %(message)s"
543
635
 
 
636
    internal_error = True
 
637
 
544
638
    # All exceptions from the lock/unlock functions should be from
545
639
    # this exception class.  They will be translated as necessary. The
546
640
    # original exception is available as e.original_error
583
677
 
584
678
    _fmt = "%(obj)r is not locked"
585
679
 
586
 
    internal_error = True
587
 
 
588
680
    # this can indicate that any particular object is not locked; see also
589
681
    # LockNotHeld which means that a particular *lock* object is not held by
590
682
    # the caller -- perhaps they should be unified.
611
703
class LockContention(LockError):
612
704
 
613
705
    _fmt = "Could not acquire lock %(lock)s"
614
 
    # TODO: show full url for lock, combining the transport and relative bits?
 
706
    # TODO: show full url for lock, combining the transport and relative
 
707
    # bits?
 
708
 
 
709
    internal_error = False
615
710
    
616
711
    def __init__(self, lock):
617
712
        self.lock = lock
621
716
 
622
717
    _fmt = "Lock was broken while still open: %(lock)s - check storage consistency!"
623
718
 
 
719
    internal_error = False
 
720
 
624
721
    def __init__(self, lock):
625
722
        self.lock = lock
626
723
 
629
726
 
630
727
    _fmt = "Lock was released and re-acquired before being broken: %(lock)s: held by %(holder)r, wanted to break %(target)r"
631
728
 
 
729
    internal_error = False
 
730
 
632
731
    def __init__(self, lock, holder, target):
633
732
        self.lock = lock
634
733
        self.holder = holder
639
738
 
640
739
    _fmt = "Lock not held: %(lock)s"
641
740
 
 
741
    internal_error = False
 
742
 
642
743
    def __init__(self, lock):
643
744
        self.lock = lock
644
745
 
1269
1370
    _fmt = "Moving the root directory is not supported at this time"
1270
1371
 
1271
1372
 
 
1373
class BzrMoveFailedError(BzrError):
 
1374
 
 
1375
    _fmt = "Could not move %(from_path)s%(operator)s %(to_path)s%(extra)s"
 
1376
 
 
1377
    def __init__(self, from_path='', to_path='', extra=None):
 
1378
        BzrError.__init__(self)
 
1379
        if extra:
 
1380
            self.extra = ': ' + str(extra)
 
1381
        else:
 
1382
            self.extra = ''
 
1383
 
 
1384
        has_from = len(from_path) > 0
 
1385
        has_to = len(to_path) > 0
 
1386
        if has_from:
 
1387
            self.from_path = osutils.splitpath(from_path)[-1]
 
1388
        else:
 
1389
            self.from_path = ''
 
1390
 
 
1391
        if has_to:
 
1392
            self.to_path = osutils.splitpath(to_path)[-1]
 
1393
        else:
 
1394
            self.to_path = ''
 
1395
 
 
1396
        self.operator = ""
 
1397
        if has_from and has_to:
 
1398
            self.operator = " =>"
 
1399
        elif has_from:
 
1400
            self.from_path = "from " + from_path
 
1401
        elif has_to:
 
1402
            self.operator = "to"
 
1403
        else:
 
1404
            self.operator = "file"
 
1405
 
 
1406
 
 
1407
class BzrRenameFailedError(BzrMoveFailedError):
 
1408
 
 
1409
    _fmt = "Could not rename %(from_path)s%(operator)s %(to_path)s%(extra)s"
 
1410
 
 
1411
    def __init__(self, from_path, to_path, extra=None):
 
1412
        BzrMoveFailedError.__init__(self, from_path, to_path, extra)
 
1413
 
 
1414
 
1272
1415
class BzrBadParameterNotString(BzrBadParameter):
1273
1416
 
1274
1417
    _fmt = "Parameter %(param)s is not a string or unicode string."