# HG changeset patch # User Patrick Mezard # Date 1177753411 -7200 # Node ID 8c2a18cc3096dd300d196c2b960e8e91fbf6791a # Parent f4af7960d5784183b4627491197eac96d805b164 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. diff -r f4af7960d578 -r 8c2a18cc3096 mercurial/util_win32.py --- 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