Mercurial > hg
changeset 4382:8c2a18cc3096
Fix find_in_path not including some file extension logic under win32.
Windows shell resolves utility path by combining PATH, the utility name and a set of file extensions from PATHEXT.
author | Patrick Mezard <pmezard@gmail.com> |
---|---|
date | Sat, 28 Apr 2007 11:43:31 +0200 |
parents | f4af7960d578 |
children | 28054fc34923 |
files | mercurial/util_win32.py |
diffstat | 1 files changed, 25 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/util_win32.py Sat Apr 28 16:28:54 2007 +0200 +++ b/mercurial/util_win32.py Sat Apr 28 11:43:31 2007 +0200 @@ -297,5 +297,30 @@ win32file.SetEndOfFile(self.handle) except pywintypes.error, err: raise WinIOError(err) + +def find_in_path(name, path, default=None): + '''find name in search path. path can be string (will be split + with os.pathsep), or iterable thing that returns strings. if name + found, return path to name. else return default. name is looked up + using cmd.exe rules, using PATHEXT.''' + if isinstance(path, str): + path = path.split(os.pathsep) + + pathext = os.environ.get('PATHEXT', '.COM;.EXE;.BAT;.CMD') + pathext = pathext.lower().split(os.pathsep) + isexec = os.path.splitext(name)[1].lower() in pathext + + for p in path: + p_name = os.path.join(p, name) + + if isexec and os.path.exists(p_name): + return p_name + + for ext in pathext: + p_name_ext = p_name + ext + if os.path.exists(p_name_ext): + return p_name_ext + + return default getuser_fallback = win32api.GetUserName