odbmgr: separate repo and local odbs

This commit is contained in:
Ruslan Kuprieiev
2022-08-03 21:10:28 +03:00
parent e525d9bedb
commit ecd98bdf7d
7 changed files with 16 additions and 13 deletions
+1 -1
View File
@@ -58,7 +58,7 @@ def _get_caches(cache):
caches = ( caches = (
cache_type cache_type
for cache_type, cache_instance in cache.by_scheme() for cache_type, cache_instance in cache.by_scheme()
if cache_instance if cache_instance and cache_type != "repo"
) )
# Caches will be always non-empty including the local cache # Caches will be always non-empty including the local cache
+5 -3
View File
@@ -24,7 +24,7 @@ class ODBManager:
] ]
def __init__(self, repo): def __init__(self, repo):
self.repo = repo self._repo = repo
self.config = config = repo.config["cache"] self.config = config = repo.config["cache"]
self._odb = {} self._odb = {}
@@ -42,13 +42,15 @@ class ODBManager:
if opt in config: if opt in config:
settings[str(opt)] = config.get(opt) settings[str(opt)] = config.get(opt)
self._odb[Schemes.LOCAL] = _get_odb(repo, settings) odb = _get_odb(repo, settings)
self._odb["repo"] = odb
self._odb[Schemes.LOCAL] = odb
def _init_odb(self, schemes): def _init_odb(self, schemes):
for scheme in 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._odb[scheme] = _get_odb(self.repo, settings) self._odb[scheme] = _get_odb(self._repo, settings)
def __getattr__(self, name): def __getattr__(self, name):
if name not in self._odb and name in self.CLOUD_SCHEMES: if name not in self._odb and name in self.CLOUD_SCHEMES:
+2 -1
View File
@@ -409,7 +409,8 @@ class Output:
@property @property
def odb(self): def odb(self):
odb = getattr(self.repo.odb, self.protocol) odb_name = "repo" if self.is_in_repo else self.protocol
odb = getattr(self.repo.odb, odb_name)
if self.use_cache and odb is None: if self.use_cache and odb is None:
raise RemoteCacheRequiredError(self.fs.protocol, self.fs_path) raise RemoteCacheRequiredError(self.fs.protocol, self.fs_path)
return odb return odb
+3 -3
View File
@@ -364,13 +364,13 @@ class Repo:
) )
def unprotect(self, target): def unprotect(self, target):
return self.odb.local.unprotect(target) return self.odb.repo.unprotect(target)
def _ignore(self): def _ignore(self):
flist = [self.config.files["local"], self.tmp_dir] flist = [self.config.files["local"], self.tmp_dir]
if path_isin(self.odb.local.cache_dir, self.root_dir): if path_isin(self.odb.repo.cache_dir, self.root_dir):
flist += [self.odb.local.cache_dir] flist += [self.odb.repo.cache_dir]
for file in flist: for file in flist:
self.scm_context.ignore(file) self.scm_context.ignore(file)
+2 -2
View File
@@ -168,7 +168,7 @@ def _diff_index_to_wtree(repo: "Repo", **kwargs: Any) -> Dict[str, List[str]]:
except FileNotFoundError: except FileNotFoundError:
new = None new = None
cache = repo.odb.local cache = repo.odb.repo
root = str(out) root = str(out)
old = out.get_obj() old = out.get_obj()
with ui.status(f"Calculating diff for {root} between index/workspace"): with ui.status(f"Calculating diff for {root} between index/workspace"):
@@ -196,7 +196,7 @@ def _diff_head_to_index(
typ = "index" if rev == "workspace" else head typ = "index" if rev == "workspace" else head
objs[root][typ] = out.get_obj() objs[root][typ] = out.get_obj()
cache = repo.odb.local cache = repo.odb.repo
for root, obj_d in objs.items(): for root, obj_d in objs.items():
old = obj_d.get(head, None) old = obj_d.get(head, None)
new = obj_d.get("index", None) new = obj_d.get("index", None)
+2 -2
View File
@@ -140,9 +140,9 @@ def _output_paths(repo, targets):
if on_working_fs: if on_working_fs:
_, _, obj = build( _, _, obj = build(
repo.odb.local, repo.odb.repo,
output.fs_path, output.fs_path,
repo.odb.local.fs, repo.odb.repo.fs,
"md5", "md5",
dry_run=True, dry_run=True,
ignore=output.dvcignore, ignore=output.dvcignore,
+1 -1
View File
@@ -112,7 +112,7 @@ class TempDirExecutor(BaseLocalExecutor):
def init_cache(self, repo: "Repo", rev: str, run_cache: bool = True): def init_cache(self, repo: "Repo", rev: str, run_cache: bool = True):
"""Initialize DVC cache.""" """Initialize DVC cache."""
self._config(repo.odb.local.cache_dir) self._config(repo.odb.repo.cache_dir)
def cleanup(self): def cleanup(self):
super().cleanup() super().cleanup()