From a566e92ce01ef844dfdc0604803cf1dc45c3f094 Mon Sep 17 00:00:00 2001 From: Ruslan Kuprieiev Date: Fri, 17 Aug 2018 11:20:59 +0300 Subject: [PATCH 1/2] dvc: properly resolve dvc name for external local files Signed-off-by: Ruslan Kuprieiev --- dvc/stage.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dvc/stage.py b/dvc/stage.py index 1708e1797..eef50c6f8 100644 --- a/dvc/stage.py +++ b/dvc/stage.py @@ -231,7 +231,8 @@ class Stage(object): if not fname: fname = path.basename(out.path) + cls.STAGE_FILE_SUFFIX - cwd = path.dirname(out.path) if not cwd or add else cwd + if not cwd or (add and out.is_local): + cwd = path.dirname(out.path) return (fname, cwd) From a46b1be925eb090069c09f14973b28ea578f256b Mon Sep 17 00:00:00 2001 From: Ruslan Kuprieiev Date: Fri, 17 Aug 2018 14:07:55 +0300 Subject: [PATCH 2/2] test: add test for `dvc add` for external local files Signed-off-by: Ruslan Kuprieiev --- tests/test_add.py | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/test_add.py b/tests/test_add.py index 6b2be9991..54741a1eb 100644 --- a/tests/test_add.py +++ b/tests/test_add.py @@ -1,6 +1,8 @@ import os import stat import shutil +import filecmp +import tempfile from dvc.main import main from dvc.utils import file_md5 @@ -96,6 +98,22 @@ class TestAddFileInDir(TestDvc): self.assertEqual(stage.relpath, self.DATA_SUB + '.dvc') +class TestAddExternalLocalFile(TestDvc): + def test(self): + dname = tempfile.mkdtemp() + fname = os.path.join(dname, 'foo') + shutil.copyfile(self.FOO, fname) + + stage = self.dvc.add(fname) + self.assertNotEqual(stage, None) + self.assertEqual(len(stage.deps), 0) + self.assertEqual(len(stage.outs), 1) + self.assertEqual(stage.relpath, 'foo.dvc') + self.assertEqual(len(os.listdir(dname)), 1) + self.assertTrue(os.path.isfile(fname)) + self.assertTrue(filecmp.cmp(fname, 'foo', shallow=False)) + + class TestCmdAdd(TestDvc): def test(self): ret = main(['add',