diff --git a/dvc/cli.py b/dvc/cli.py index b43151a5b..d515bd208 100644 --- a/dvc/cli.py +++ b/dvc/cli.py @@ -19,7 +19,7 @@ from dvc.command.imp import CmdImport from dvc.command.config import CmdConfig from dvc.command.checkout import CmdCheckout from dvc.command.remote import CmdRemoteAdd, CmdRemoteRemove -from dvc.command.remote import CmdRemoteModify, CmdRemoteList +from dvc.command.remote import CmdRemoteModify, CmdRemoteList, CmdRemoteDefault from dvc.command.metrics import CmdMetricsShow, CmdMetricsAdd from dvc.command.metrics import CmdMetricsRemove, CmdMetricsModify from dvc.command.install import CmdInstall @@ -733,6 +733,40 @@ def parse_args(argv=None): help='Set as default remote.') remote_add_parser.set_defaults(func=CmdRemoteAdd) + REMOTE_DEFAULT_HELP = 'Set/unset default remote.' + remote_default_parser = remote_subparsers.add_parser( + 'default', + parents=[parent_parser], + description=REMOTE_DEFAULT_HELP, + help=REMOTE_DEFAULT_HELP) + remote_default_parser.add_argument( + 'name', + nargs='?', + help='Name of the remote.') + remote_default_parser.add_argument( + '-u', + '--unset', + action='store_true', + default=False, + help='Unset default remote.') + remote_default_parser.add_argument( + '--global', + dest='glob', + action='store_true', + default=False, + help='Use global config.') + remote_default_parser.add_argument( + '--system', + action='store_true', + default=False, + help='Use system config.') + remote_default_parser.add_argument( + '--local', + action='store_true', + default=False, + help='Use local config.') + remote_default_parser.set_defaults(func=CmdRemoteDefault) + REMOTE_REMOVE_HELP = 'Remove remote.' remote_remove_parser = remote_subparsers.add_parser( 'remove', diff --git a/dvc/command/remote.py b/dvc/command/remote.py index 011823265..607ce2f71 100644 --- a/dvc/command/remote.py +++ b/dvc/command/remote.py @@ -62,6 +62,13 @@ class CmdRemoteModify(CmdConfig): return super(CmdRemoteModify, self).run() +class CmdRemoteDefault(CmdConfig): + def run(self): + self.args.value = self.args.name + self.args.name = 'core.remote' + return super(CmdRemoteDefault, self).run() + + class CmdRemoteList(CmdConfig): def run(self): for section in self.configobj.keys(): diff --git a/tests/test_remote.py b/tests/test_remote.py index ad479fbe7..3762fa736 100644 --- a/tests/test_remote.py +++ b/tests/test_remote.py @@ -96,3 +96,27 @@ class TestRemoteRemove(TestDvc): ret = main(['remote', 'remove', remote]) self.assertEqual(ret, 0) + + +class TestRemoteDefault(TestDvc): + def test(self): + remote = 'mys3' + ret = main(['remote', 'add', 'mys3', 's3://bucket/path']) + self.assertEqual(ret, 0) + + ret = main(['remote', 'default', 'mys3']) + self.assertEqual(ret, 0) + config_file = os.path.join(self.dvc.dvc_dir, Config.CONFIG) + config = configobj.ConfigObj(config_file) + default = config[Config.SECTION_CORE][Config.SECTION_CORE_REMOTE] + self.assertEqual(default, remote) + + ret = main(['remote', 'default', '--unset']) + self.assertEqual(ret, 0) + config = configobj.ConfigObj(config_file) + core = config.get(Config.SECTION_CORE) + if core is not None: + default = core.get(Config.SECTION_CORE_REMOTE) + else: + default = None + self.assertEqual(default, None)