tree: resolve deep remote:// urls (#4568)

Fixes #4556
This commit is contained in:
Ruslan Kuprieiev
2020-09-14 05:49:54 +03:00
committed by GitHub
parent 8b16af965c
commit 424396b068
2 changed files with 21 additions and 3 deletions
+3 -3
View File
@@ -43,10 +43,10 @@ def _get_conf(repo, **kwargs):
remote_conf = repo.config["remote"][name.lower()]
else:
remote_conf = kwargs
return _resolve_remote_refs(repo.config, remote_conf)
return _resolve_remote_refs(repo, remote_conf)
def _resolve_remote_refs(config, remote_conf):
def _resolve_remote_refs(repo, remote_conf):
# Support for cross referenced remotes.
# This will merge the settings, shadowing base ref with remote_conf.
# For example, having:
@@ -72,7 +72,7 @@ def _resolve_remote_refs(config, remote_conf):
if parsed.scheme != "remote":
return remote_conf
base = config["remote"][parsed.netloc]
base = _get_conf(repo, name=parsed.netloc)
url = posixpath.join(base["url"], parsed.path.lstrip("/"))
return {**base, **remote_conf, "url": url}
+18
View File
@@ -0,0 +1,18 @@
from dvc.path_info import CloudURLInfo
from dvc.tree import get_cloud_tree
def test_get_cloud_tree(tmp_dir, dvc):
tmp_dir.add_remote(name="base", url="s3://bucket/path", default=False)
tmp_dir.add_remote(name="first", url="remote://base/first", default=False)
tmp_dir.add_remote(
name="second", url="remote://first/second", default=False
)
base = CloudURLInfo("s3://bucket/path")
first = base / "first"
second = first / "second"
assert get_cloud_tree(dvc, name="base").path_info == base
assert get_cloud_tree(dvc, name="first").path_info == first
assert get_cloud_tree(dvc, name="second").path_info == second