~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/osutils.py

  • Committer: Jelmer Vernooij
  • Date: 2012-04-16 11:08:11 UTC
  • mfrom: (6521 +trunk)
  • mto: This revision was merged to the branch mainline in revision 6522.
  • Revision ID: jelmer@samba.org-20120416110811-0y996ihqy9o2bb1t
Merge bzr.dev.

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:
2473
2495
    :param name: The base name of the executable.
2474
2496
    :return: The path to the executable found or None.
2475
2497
    """
2476
 
    path = os.environ.get('PATH')
2477
 
    if path is None:
2478
 
        return None
2479
 
    path = path.split(os.pathsep)
2480
2498
    if sys.platform == 'win32':
2481
2499
        exts = os.environ.get('PATHEXT', '').split(os.pathsep)
2482
2500
        exts = [ext.lower() for ext in exts]
2488
2506
            exts = [ext]
2489
2507
    else:
2490
2508
        exts = ['']
2491
 
    for ext in exts:
2492
 
        for d in path:
2493
 
            f = os.path.join(d, name) + ext
2494
 
            if os.access(f, os.X_OK):
2495
 
                return f
 
2509
    path = os.environ.get('PATH')
 
2510
    if path is not None:
 
2511
        path = path.split(os.pathsep)
 
2512
        for ext in exts:
 
2513
            for d in path:
 
2514
                f = os.path.join(d, name) + ext
 
2515
                if os.access(f, os.X_OK):
 
2516
                    return f
 
2517
    if sys.platform == 'win32':
 
2518
        app_path = win32utils.get_app_path(name)
 
2519
        if app_path != name:
 
2520
            return app_path
2496
2521
    return None
2497
2522
 
2498
2523