From bdd5ca48da578cec017bde95fe432290aa3b75cd Mon Sep 17 00:00:00 2001 From: Alexander Schepanovski Date: Tue, 25 Jun 2019 18:47:10 +0700 Subject: [PATCH] dvc: fix relpath() - accept Path-like object as start in Python3.5- - always return str Closes #2188. --- dvc/utils/__init__.py | 13 +++---------- tests/unit/utils/test_fs.py | 7 ++++++- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/dvc/utils/__init__.py b/dvc/utils/__init__.py index 589f09008..7e83d2485 100644 --- a/dvc/utils/__init__.py +++ b/dvc/utils/__init__.py @@ -2,14 +2,7 @@ from __future__ import unicode_literals -from dvc.utils.compat import ( - str, - builtin_str, - open, - cast_bytes_py2, - StringIO, - fspath_py35, -) +from dvc.utils.compat import str, builtin_str, open, cast_bytes_py2, StringIO from dvc.utils.compat import fspath import os @@ -380,8 +373,8 @@ def _visual_center(line, width): def relpath(path, start=os.curdir): - path = fspath_py35(path) - start = fspath_py35(os.path.abspath(start)) + path = fspath(path) + start = os.path.abspath(fspath(start)) # Windows path on different drive than curdir doesn't have relpath if os.name == "nt" and not os.path.commonprefix( diff --git a/tests/unit/utils/test_fs.py b/tests/unit/utils/test_fs.py index 6924856c1..f34a91415 100644 --- a/tests/unit/utils/test_fs.py +++ b/tests/unit/utils/test_fs.py @@ -4,6 +4,7 @@ from unittest import TestCase import dvc import pytest from dvc.system import System +from dvc.path_info import PathInfo from dvc.utils import relpath from dvc.utils.compat import str from dvc.utils.fs import ( @@ -142,5 +143,9 @@ def test_get_parent_dirs_up_to(path1, path2, expected_dirs): def test_relpath_windows_different_drives(): path1 = os.path.join("A:", os.sep, "some", "path") path2 = os.path.join("B:", os.sep, "other", "path") - assert relpath(path1, path2) == path1 + + info1, info2 = PathInfo(path1), PathInfo(path2) + rel_info = relpath(info1, info2) + assert isinstance(rel_info, str) + assert rel_info == path1