diff --git a/dvc/cli.py b/dvc/cli.py index 24edf0d34..0c3a5eaa1 100644 --- a/dvc/cli.py +++ b/dvc/cli.py @@ -176,6 +176,7 @@ def parse_args(argv=None): "`dvc remote` commands). ") import_parser.add_argument( 'out', + nargs='?', help='Output.') import_parser.set_defaults(func=CmdImport) diff --git a/dvc/command/imp.py b/dvc/command/imp.py index 9f13a730b..d7d9835b7 100644 --- a/dvc/command/imp.py +++ b/dvc/command/imp.py @@ -1,3 +1,10 @@ +import os + +try: + from urlparse import urlparse +except ImportError: + from urllib.parse import urlparse + from dvc.exceptions import DvcException from dvc.command.base import CmdBase from dvc.logger import Logger @@ -6,7 +13,13 @@ from dvc.logger import Logger class CmdImport(CmdBase): def run(self): try: - self.project.imp(self.args.url, self.args.out) + default_out = os.path.basename( + urlparse(self.args.url).path + ) + + out = self.args.out or default_out + + self.project.imp(self.args.url, out) except DvcException as ex: Logger.error('Failed to import {}'.format(self.args.url), ex) return 1 diff --git a/tests/test_import.py b/tests/test_import.py index 18a4581b5..58b036199 100644 --- a/tests/test_import.py +++ b/tests/test_import.py @@ -1,6 +1,8 @@ import os import stat import shutil +import tempfile +from uuid import uuid4 from dvc.main import main from dvc.command.imp import CmdImport @@ -11,14 +13,27 @@ from tests.basic_env import TestDvc class TestCmdImport(TestDvc): def test(self): - ret = main(['import', - self.FOO, 'import']) + ret = main(['import', self.FOO, 'import']) self.assertEqual(ret, 0) + self.assertTrue(os.path.exists('import.dvc')) - ret = main(['import', - 'non-existing-file', 'import']) + ret = main(['import', 'non-existing-file', 'import']) self.assertNotEqual(ret, 0) def test_unsupported(self): ret = main(['import', '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', tmpfile]) + self.assertEqual(ret, 0) + self.assertTrue(os.path.exists(filename)) + self.assertEqual(open(filename).read(), 'content')