~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/osutils.py

  • Committer: Patch Queue Manager
  • Date: 2012-03-12 19:01:05 UTC
  • mfrom: (6468.6.2 492144-rename-wrapper)
  • Revision ID: pqm@pqm.ubuntu.com-20120312190105-p9dg7dxetifq1k0w
(gz) Implement osutils._rename_wrap_exception for recording both filenames
 in the error (Ross Lagerwall)

Show diffs side-by-side

added added

removed removed

Lines of Context:
450
450
    return unicodedata.normalize('NFC', os.getcwdu())
451
451
 
452
452
 
 
453
def _rename_wrap_exception(rename_func):
 
454
    """Adds extra information to any exceptions that come from rename().
 
455
 
 
456
    The exception has an updated message and 'old_filename' and 'new_filename'
 
457
    attributes.
 
458
    """
 
459
 
 
460
    def _rename_wrapper(old, new):
 
461
        try:
 
462
            rename_func(old, new)
 
463
        except OSError, e:
 
464
            detailed_error = OSError(e.errno, e.strerror +
 
465
                                " [occurred when renaming '%s' to '%s']" %
 
466
                                (old, new))
 
467
            detailed_error.old_filename = old
 
468
            detailed_error.new_filename = new
 
469
            raise detailed_error
 
470
 
 
471
    return _rename_wrapper
 
472
 
 
473
# Default rename wraps os.rename()
 
474
rename = _rename_wrap_exception(os.rename)
 
475
 
453
476
# Default is to just use the python builtins, but these can be rebound on
454
477
# particular platforms.
455
478
abspath = _posix_abspath
460
483
_get_home_dir = _posix_get_home_dir
461
484
getuser_unicode = _posix_getuser_unicode
462
485
getcwd = os.getcwdu
463
 
rename = os.rename
464
486
dirname = os.path.dirname
465
487
basename = os.path.basename
466
488
split = os.path.split
488
510
    normpath = _win32_normpath
489
511
    getcwd = _win32_getcwd
490
512
    mkdtemp = _win32_mkdtemp
491
 
    rename = _win32_rename
 
513
    rename = _rename_wrap_exception(_win32_rename)
492
514
    try:
493
515
        from bzrlib import _walkdirs_win32
494
516
    except ImportError: