--- python/python/dist/src/Lib/ntpath.py 2003/10/20 14:01:50 1.58 +++ python/python/dist/src/Lib/ntpath.py 2004/05/20 20:21:35 1.59 @@ -342,30 +342,53 @@ # (A function should also be defined to do full *sh-style environment # variable expansion.) -def expanduser(path): +def expanduser(path, iterations=3): """Expand ~ and ~user constructs. If user or $HOME is unknown, do nothing.""" if path[:1] != '~': return path i, n = 1, len(path) + + #are we looking for ~ or ~user ? while i < n and path[i] not in '/\\': i = i + 1 - if i == 1: - if 'HOME' in os.environ: - userhome = os.environ['HOME'] - elif not 'HOMEPATH' in os.environ: - return path - else: - try: - drive = os.environ['HOMEDRIVE'] - except KeyError: - drive = '' - userhome = join(drive, os.environ['HOMEPATH']) - else: + if i != 1: # ~user + user = path[1:i] + else: # ~ + user = None + + if 'HOME' in os.environ: + userhome = os.environ['HOME'] + elif 'USERPROFILE' in os.environ: + userhome = os.environ['USERPROFILE'] + elif not 'HOMEPATH' in os.environ: return path - return userhome + path[i:] + else: + try: + drive = os.environ['HOMEDRIVE'] + except KeyError: + drive = '' + userhome = join(drive, os.environ['HOMEPATH']) + + if not user is None: # ~user + j = userhome.rfind('\\') + if j != -1: # Likely user-sensitive information, customize for ~user + userhome = join(userhome[:j], user) + ret = normpath(join(userhome, path[i+1:])) + #the below should likely become some sort of ntexpandvars command + #due to the fact that NT doesn't do $var shell variables + for j in xrange(iterations): + parts = ret.split('\\') + next = [] + for part in parts: + if len(part) > 1 and part[0] == part[-1] == '%': + next.append(os.environ.get(part[1:-1], part)) + else: + next.append(part) + ret = normpath(join(*next)) + return ret # Expand paths containing shell variable substitutions. # The following rules apply: