repo: site_cache_dir: separate subdir from root_dir (#10273)

* repo: site_cache_dir: separate subdir from root_dir

Currently we join scm root_dir with subrepo root dir to have something that would represent that subrepo, but that directory might not exist in reality as we might be using a bare git repo. So we should just treat those as separate things.

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Update __init__.py

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This commit is contained in:
Ruslan Kuprieiev
2024-02-01 09:32:22 +02:00
committed by GitHub
co-authored by pre-commit-ci[bot]
parent f42468bcaf
commit 0bb2f3d10c
+7 -5
View File
@@ -608,12 +608,12 @@ class Repo:
cache_dir = self.config["core"].get("site_cache_dir") or site_cache_dir()
subdir = None
if isinstance(self.fs, GitFileSystem):
relparts: tuple[str, ...] = ()
if self.root_dir != "/":
# subrepo
relparts = self.fs.relparts(self.root_dir, "/")
root_dir = os.path.join(self.scm.root_dir, *relparts)
subdir = self.root_dir
root_dir = self.scm.root_dir
else:
root_dir = self.root_dir
@@ -629,14 +629,16 @@ class Repo:
# components were changed (useful to prevent newer dvc versions from
# using older broken cache). Please reset this back to 0 if other parts
# of the token components are changed.
salt = 2
salt = 0
# NOTE: This helps us avoid accidentally reusing cache for repositories
# that just happened to be at the same path as old deleted ones.
btime = self._btime or getattr(os.stat(root_dir), "st_birthtime", None)
md5 = hashlib.md5( # noqa: S324
str((root_dir, btime, getpass.getuser(), version_tuple[0], salt)).encode()
str(
(root_dir, subdir, btime, getpass.getuser(), version_tuple[0], salt)
).encode()
)
repo_token = md5.hexdigest()
return os.path.join(repos_dir, repo_token)