Dvc remote default in list validation (#3715)

* fix #3470

Add validation to restrict default remote repo in list of remote repos.

* fix #3470

1. add two tests
2. add one validation
3. modified remote remove to satithe validation change

* Pass DeepSource

* deepsource required

* Redesigned.

* fix typo

* Revert "deepsource required"

This reverts commit 1ae458c34f49e8d7b35c39c1e6c592b423493a97.

* Revert "Pass DeepSource"

This reverts commit b254d104df65295e0a1156f3979b365be9d38a3d.

Co-authored-by: karajan1001 <[email protected]>
Co-authored-by: Ruslan Kuprieiev <[email protected]>
This commit is contained in:
karajan1001
2020-05-09 20:59:17 +03:00
committed by GitHub
co-authored by karajan1001 Ruslan Kuprieiev
parent d62a54c7b0
commit 6093a1fe97
3 changed files with 34 additions and 4 deletions
+12 -1
View File
@@ -85,7 +85,18 @@ class CmdRemoteDefault(CmdRemote):
if self.args.unset:
conf["core"].pop("remote", None)
else:
conf["core"]["remote"] = self.args.name
merged_conf = self.config.load_config_to_level(
self.args.level
)
if (
self.args.name in conf["remote"]
or self.args.name in merged_conf["remote"]
):
conf["core"]["remote"] = self.args.name
else:
raise ConfigError(
"default remote must be present in remote list."
)
return 0
+3 -3
View File
@@ -289,7 +289,7 @@ class Config(dict):
Raises:
ConfigError: thrown if config has an invalid format.
"""
conf = self._load_config_to_level()
conf = self.load_config_to_level()
if validate:
conf = self.validate(conf)
@@ -349,7 +349,7 @@ class Config(dict):
}
return Schema(dirs_schema, extra=ALLOW_EXTRA)(conf)
def _load_config_to_level(self, level=None):
def load_config_to_level(self, level=None):
merged_conf = {}
for merge_level in self.LEVELS:
if merge_level == level:
@@ -368,7 +368,7 @@ class Config(dict):
conf = self._save_paths(conf, self.files[level])
merged_conf = self._load_config_to_level(level)
merged_conf = self.load_config_to_level(level)
_merge(merged_conf, conf)
self.validate(merged_conf)
+19
View File
@@ -123,6 +123,7 @@ class TestRemoteDefault(TestDvc):
def test_show_default(dvc, capsys):
assert main(["remote", "add", "foo", "s3://bucket/name"]) == 0
assert main(["remote", "default", "foo"]) == 0
assert main(["remote", "default"]) == 0
out, _ = capsys.readouterr()
@@ -272,3 +273,21 @@ def test_remote_modify_validation(dvc):
)
config = configobj.ConfigObj(dvc.config.files["repo"])
assert unsupported_config not in config['remote "{}"'.format(remote_name)]
def test_remote_modify_default(dvc):
remote_repo = "repo_level"
remote_local = "local_level"
wrong_name = "anything"
assert main(["remote", "add", remote_repo, "s3://bucket/repo"]) == 0
assert main(["remote", "add", remote_local, "s3://bucket/local"]) == 0
assert main(["remote", "default", wrong_name]) == 251
assert main(["remote", "default", remote_repo]) == 0
assert main(["remote", "default", "--local", remote_local]) == 0
repo_config = configobj.ConfigObj(dvc.config.files["repo"])
local_config = configobj.ConfigObj(dvc.config.files["local"])
assert repo_config["core"]["remote"] == remote_repo
assert local_config["core"]["remote"] == remote_local