cache: don't initalize cloud cache until its needed (#5264)

This commit is contained in:
Batuhan Taskaya
2021-01-13 17:01:06 +02:00
committed by GitHub
parent 2ee68b01b0
commit e5f91f5c7f
2 changed files with 16 additions and 2 deletions
+7 -2
View File
@@ -65,18 +65,23 @@ class Cache:
self._cache[Schemes.LOCAL] = _get_cache(repo, settings) self._cache[Schemes.LOCAL] = _get_cache(repo, settings)
for scheme in self.CLOUD_SCHEMES: def _initalize_cloud_cache(self, schemes):
for scheme in schemes:
remote = self.config.get(scheme) remote = self.config.get(scheme)
settings = {"name": remote} if remote else None settings = {"name": remote} if remote else None
self._cache[scheme] = _get_cache(repo, settings) self._cache[scheme] = _get_cache(self.repo, settings)
def __getattr__(self, name): def __getattr__(self, name):
if name not in self._cache and name in self.CLOUD_SCHEMES:
self._initalize_cloud_cache([name])
try: try:
return self._cache[name] return self._cache[name]
except KeyError as exc: except KeyError as exc:
raise AttributeError from exc raise AttributeError from exc
def by_scheme(self): def by_scheme(self):
self._initalize_cloud_cache(self.CLOUD_SCHEMES)
yield from self._cache.items() yield from self._cache.items()
+9
View File
@@ -132,3 +132,12 @@ def test_branch_config(tmp_dir, scm):
dvc = Repo(scm=scm, rev="branch") dvc = Repo(scm=scm, rev="branch")
assert dvc.config["remote"]["branch"]["url"] == "/some/path" assert dvc.config["remote"]["branch"]["url"] == "/some/path"
def test_dynamic_cache_initalization(tmp_dir, scm):
dvc = Repo.init()
with dvc.config.edit() as conf:
conf["cache"]["ssh"] = "foo"
conf["remote"]["foo"] = {"url": "remote://bar/baz"}
Repo(str(tmp_dir))