diff options
author | Antoine Pietri <antoine.pietri1@gmail.com> | 2017-06-07 17:18:56 (GMT) |
---|---|---|
committer | Steve Dower <steve.dower@microsoft.com> | 2017-06-07 17:18:56 (GMT) |
commit | ceabf9acf03f9bbe660d856bff90ecab475ab543 (patch) | |
tree | ed32702b01d5fa6247a70cb89e7e842157a3976d /Lib/pathlib.py | |
parent | 09b6c0c71ea944f7e8b46998f3ebaf5b9fbe15f6 (diff) | |
download | cpython-ceabf9acf03f9bbe660d856bff90ecab475ab543.zip cpython-ceabf9acf03f9bbe660d856bff90ecab475ab543.tar.gz cpython-ceabf9acf03f9bbe660d856bff90ecab475ab543.tar.bz2 |
bpo-30177: pathlib: include the full path in resolve(strict=False) (#1893) (#1985)
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 70f5cba..48b566d 100644 --- a/Lib/pathlib.py +++ b/Lib/pathlib.py @@ -187,19 +187,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 @@ -330,12 +329,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 |