mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-06 07:18:28 +01:00
* get/import/url: handle existing output directory Currently if you run ``` dvc get https://github.com/iterative/example-get-started model.pkl --out . ``` it will nuke your cwd. To fix that we need to properly handle existing directories, same as usual unix cli utilities do that. * travis: specify python version when installing from chocolatey Fixes #2609
109 lines
3.1 KiB
Python
109 lines
3.1 KiB
Python
from __future__ import unicode_literals
|
|
|
|
import os
|
|
from uuid import uuid4
|
|
|
|
import pytest
|
|
import filecmp
|
|
from mock import patch
|
|
|
|
import dvc
|
|
from dvc.main import main
|
|
from dvc.utils import makedirs
|
|
from dvc.utils.compat import str
|
|
|
|
from tests.basic_env import TestDvc
|
|
from tests.utils import spy
|
|
|
|
|
|
class TestCmdImport(TestDvc):
|
|
def test(self):
|
|
ret = main(["import-url", self.FOO, "import"])
|
|
self.assertEqual(ret, 0)
|
|
self.assertTrue(os.path.exists("import.dvc"))
|
|
|
|
ret = main(["import-url", "non-existing-file", "import"])
|
|
self.assertNotEqual(ret, 0)
|
|
|
|
def test_unsupported(self):
|
|
ret = main(["import-url", "unsupported://path", "import_unsupported"])
|
|
self.assertNotEqual(ret, 0)
|
|
|
|
|
|
class TestDefaultOutput(TestDvc):
|
|
def test(self):
|
|
tmpdir = self.mkdtemp()
|
|
filename = str(uuid4())
|
|
tmpfile = os.path.join(tmpdir, filename)
|
|
|
|
with open(tmpfile, "w") as fd:
|
|
fd.write("content")
|
|
|
|
ret = main(["import-url", tmpfile])
|
|
self.assertEqual(ret, 0)
|
|
self.assertTrue(os.path.exists(filename))
|
|
with open(filename) as fd:
|
|
self.assertEqual(fd.read(), "content")
|
|
|
|
|
|
class TestShouldRemoveOutsBeforeImport(TestDvc):
|
|
def setUp(self):
|
|
super(TestShouldRemoveOutsBeforeImport, self).setUp()
|
|
tmp_dir = self.mkdtemp()
|
|
self.external_source = os.path.join(tmp_dir, "file")
|
|
with open(self.external_source, "w") as fobj:
|
|
fobj.write("content")
|
|
|
|
def test(self):
|
|
remove_outs_call_counter = spy(dvc.stage.Stage.remove_outs)
|
|
with patch.object(
|
|
dvc.stage.Stage, "remove_outs", remove_outs_call_counter
|
|
):
|
|
ret = main(["import-url", self.external_source])
|
|
self.assertEqual(0, ret)
|
|
|
|
self.assertEqual(1, remove_outs_call_counter.mock.call_count)
|
|
|
|
|
|
class TestImportFilename(TestDvc):
|
|
def setUp(self):
|
|
super(TestImportFilename, self).setUp()
|
|
tmp_dir = self.mkdtemp()
|
|
self.external_source = os.path.join(tmp_dir, "file")
|
|
with open(self.external_source, "w") as fobj:
|
|
fobj.write("content")
|
|
|
|
def test(self):
|
|
ret = main(["import-url", "-f", "bar.dvc", self.external_source])
|
|
self.assertEqual(0, ret)
|
|
self.assertTrue(os.path.exists("bar.dvc"))
|
|
|
|
os.remove("bar.dvc")
|
|
|
|
ret = main(["import-url", "--file", "bar.dvc", self.external_source])
|
|
self.assertEqual(0, ret)
|
|
self.assertTrue(os.path.exists("bar.dvc"))
|
|
|
|
os.remove("bar.dvc")
|
|
os.mkdir("sub")
|
|
|
|
path = os.path.join("sub", "bar.dvc")
|
|
ret = main(["import-url", "--file", path, self.external_source])
|
|
self.assertEqual(0, ret)
|
|
self.assertTrue(os.path.exists(path))
|
|
|
|
|
|
@pytest.mark.parametrize("dname", [".", "dir", "dir/subdir"])
|
|
def test_import_url_to_dir(dname, repo_dir, dvc_repo):
|
|
src = repo_dir.DATA
|
|
|
|
makedirs(dname, exist_ok=True)
|
|
|
|
stage = dvc_repo.imp_url(src, dname)
|
|
|
|
dst = os.path.join(dname, os.path.basename(src))
|
|
|
|
assert stage.outs[0].fspath == os.path.abspath(dst)
|
|
assert os.path.isdir(dname)
|
|
assert filecmp.cmp(repo_dir.DATA, dst, shallow=False)
|