From 3adede8427d7eec96fe79afab83af1b4f1992b3d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniele=20Trifir=C3=B2?= Date: Thu, 29 Sep 2022 11:34:07 +0200 Subject: [PATCH] repo: use realpath to in _get_filepath when loading stages --- dvc/repo/stage.py | 5 ++--- tests/func/test_stage.py | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/dvc/repo/stage.py b/dvc/repo/stage.py index 049e00f95..84b4629fe 100644 --- a/dvc/repo/stage.py +++ b/dvc/repo/stage.py @@ -225,10 +225,9 @@ class StageLoad: path, name = parse_target(target) return self.load_one(path=path, name=name) - @staticmethod - def _get_filepath(path: str = None, name: str = None) -> str: + def _get_filepath(self, path: str = None, name: str = None) -> str: if path: - return path + return self.repo.fs.path.realpath(path) path = PIPELINE_FILE logger.debug("Assuming '%s' to be a stage inside '%s'", name, path) diff --git a/tests/func/test_stage.py b/tests/func/test_stage.py index 82950102b..73e0699e9 100644 --- a/tests/func/test_stage.py +++ b/tests/func/test_stage.py @@ -265,6 +265,23 @@ def test_collect_repo_ignored_dir_unignored_pattern(tmp_dir, dvc, scm): assert dvc.stage.collect_repo() == [stage] +@pytest.mark.parametrize("with_deps", (False, True)) +def test_collect_symlink(tmp_dir, dvc, with_deps): + tmp_dir.gen({"data": {"foo": "foo contents"}}) + foo_path = os.path.join("data", "foo") + dvc.add(foo_path) + + data_link = tmp_dir / "data_link" + data_link.symlink_to("data") + stage = list( + dvc.stage.collect( + target=str(data_link / "foo.dvc"), with_deps=with_deps + ) + )[0] + + assert stage.addressing == f"{foo_path}.dvc" + + def test_stage_strings_representation(tmp_dir, dvc, run_copy): tmp_dir.dvc_gen("foo", "foo") stage1 = run_copy("foo", "bar", single_stage=True)