~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/osutils.py

Merge pt1 hooks branch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
2403
2403
    except (ImportError, AttributeError):
2404
2404
        # Either the fcntl module or specific constants are not present
2405
2405
        pass
 
2406
 
 
2407
 
 
2408
def find_executable_on_path(name):
 
2409
    """Finds an executable on the PATH.
 
2410
    
 
2411
    On Windows, this will try to append each extension in the PATHEXT
 
2412
    environment variable to the name, if it cannot be found with the name
 
2413
    as given.
 
2414
    
 
2415
    :param name: The base name of the executable.
 
2416
    :return: The path to the executable found or None.
 
2417
    """
 
2418
    path = os.environ.get('PATH')
 
2419
    if path is None:
 
2420
        return None
 
2421
    path = path.split(os.pathsep)
 
2422
    if sys.platform == 'win32':
 
2423
        exts = os.environ.get('PATHEXT', '').split(os.pathsep)
 
2424
        exts = [ext.lower() for ext in exts]
 
2425
        base, ext = os.path.splitext(name)
 
2426
        if ext != '':
 
2427
            if ext.lower() not in exts:
 
2428
                return None
 
2429
            name = base
 
2430
            exts = [ext]
 
2431
    else:
 
2432
        exts = ['']
 
2433
    for ext in exts:
 
2434
        for d in path:
 
2435
            f = os.path.join(d, name) + ext
 
2436
            if os.access(f, os.X_OK):
 
2437
                return f
 
2438
    return None