From f642ff76a5d7d306075e1df796551b9af5ae2031 Mon Sep 17 00:00:00 2001 From: Aman Sharma Date: Tue, 5 Nov 2019 23:24:28 +0530 Subject: [PATCH] Ensure `contains_symlink_up_to` accept both str and Path-like objects --- dvc/utils/fs.py | 4 ++++ tests/unit/utils/test_fs.py | 8 ++++++++ 2 files changed, 12 insertions(+) diff --git a/dvc/utils/fs.py b/dvc/utils/fs.py index 572423544a..e6fd674db4 100644 --- a/dvc/utils/fs.py +++ b/dvc/utils/fs.py @@ -9,6 +9,7 @@ from dvc.exceptions import DvcException from dvc.system import System from dvc.utils import dict_md5 +from dvc.utils import fspath from dvc.utils import fspath_py35 from dvc.utils import walk_files from dvc.utils.compat import str @@ -61,6 +62,9 @@ def __init__(self, path, base_path): def contains_symlink_up_to(path, base_path): + base_path = fspath(base_path) + path = fspath(path) + if base_path not in path: raise BasePathNotInCheckedPathException(path, base_path) diff --git a/tests/unit/utils/test_fs.py b/tests/unit/utils/test_fs.py index 322e90c162..438a9c705d 100644 --- a/tests/unit/utils/test_fs.py +++ b/tests/unit/utils/test_fs.py @@ -94,6 +94,14 @@ def base_path_is_symlink(path): ): self.assertFalse(contains_symlink_up_to(target_path, base_path)) + def test_path_object_and_str_are_valid_arg_types(self): + base_path = "foo" + target_path = os.path.join(base_path, "bar") + self.assertFalse(contains_symlink_up_to(target_path, base_path)) + self.assertFalse( + contains_symlink_up_to(PathInfo(target_path), PathInfo(base_path)) + ) + @pytest.mark.parametrize( "path1, path2",