mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-02 07:18:25 +01:00
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:
co-authored by
karajan1001
Ruslan Kuprieiev
parent
d62a54c7b0
commit
6093a1fe97
+12
-1
@@ -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
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user