diff options
author | 2017-06-07 17:29:17 +0200 | |
---|---|---|
committer | 2017-06-07 08:29:17 -0700 | |
commit | add98eb4fe41baeaa70fbd4ccc020833740609a4 (patch) | |
tree | 947ad36447e92d8b1b14705ff1641d0df31765a9 /Lib/pathlib.py | |
parent | bpo-30463: Add an empty __slots__ to abc.ABC. (diff) | |
download | cpython-add98eb4fe41baeaa70fbd4ccc020833740609a4.tar.gz cpython-add98eb4fe41baeaa70fbd4ccc020833740609a4.tar.bz2 cpython-add98eb4fe41baeaa70fbd4ccc020833740609a4.zip |
bpo-30177: pathlib: include the full path in resolve(strict=False) (#1893)
Diffstat (limited to 'Lib/pathlib.py')
-rw-r--r-- | Lib/pathlib.py | 19 |
1 files changed, 8 insertions, 11 deletions
diff --git a/Lib/pathlib.py b/Lib/pathlib.py index 4d89436f775..0e65c61f654 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -183,19 +183,18 @@ class _WindowsFlavour(_Flavour): if strict: return self._ext_to_normal(_getfinalpathname(s)) else: + tail_parts = [] # End of the path after the first one not found while True: try: s = self._ext_to_normal(_getfinalpathname(s)) except FileNotFoundError: previous_s = s - s = os.path.dirname(s) + s, tail = os.path.split(s) + tail_parts.append(tail) if previous_s == s: return path else: - if previous_s is None: - return s - else: - return s + os.path.sep + os.path.basename(previous_s) + return os.path.join(s, *reversed(tail_parts)) # Means fallback on absolute return None @@ -326,12 +325,10 @@ class _PosixFlavour(_Flavour): try: target = accessor.readlink(newpath) except OSError as e: - if e.errno != EINVAL: - if strict: - raise - else: - return newpath - # Not a symlink + if e.errno != EINVAL and strict: + raise + # Not a symlink, or non-strict mode. We just leave the path + # untouched. path = newpath else: seen[newpath] = None # not resolved symlink |