diff --git a/dvc/dirs.py b/dvc/dirs.py index 881a30840..eef78f856 100644 --- a/dvc/dirs.py +++ b/dvc/dirs.py @@ -1,4 +1,5 @@ import os +from typing import Optional import platformdirs @@ -20,13 +21,16 @@ def global_config_dir(): ) -def site_cache_dir(): +def site_cache_dir(config_site_cache_dir: Optional[str] = None): from platformdirs import PlatformDirs from platformdirs.unix import Unix if dvc_site_cache_dir := os.getenv(env.DVC_SITE_CACHE_DIR): return dvc_site_cache_dir + if config_site_cache_dir is not None: + return config_site_cache_dir + if issubclass(Unix, PlatformDirs): # Return the cache directory shared by users, e.g. `/var/tmp/$appname` # NOTE: platformdirs>=5 changed `site_cache_dir` to return /var/cache/$appname. diff --git a/dvc/repo/__init__.py b/dvc/repo/__init__.py index 2b8962697..9f296f85e 100644 --- a/dvc/repo/__init__.py +++ b/dvc/repo/__init__.py @@ -609,7 +609,7 @@ class Repo: from dvc.fs import GitFileSystem from dvc.version import version_tuple - cache_dir = self.config["core"].get("site_cache_dir") or site_cache_dir() + cache_dir = site_cache_dir(self.config["core"].get("site_cache_dir")) subdir = None if isinstance(self.fs, GitFileSystem): diff --git a/tests/unit/test_dirs.py b/tests/unit/test_dirs.py index 259a330af..7ef79e364 100644 --- a/tests/unit/test_dirs.py +++ b/tests/unit/test_dirs.py @@ -21,3 +21,13 @@ def test_site_cache_dir_on_unix(monkeypatch): def test_site_cache_dir_env_var(monkeypatch): monkeypatch.setenv(DVC_SITE_CACHE_DIR, "foo_bar") assert site_cache_dir() == "foo_bar" + + +def test_site_cache_dir_with_config_parameter(monkeypatch): + monkeypatch.delenv(DVC_SITE_CACHE_DIR) + assert site_cache_dir(config_site_cache_dir="foo_bar") == "foo_bar" + + +def test_site_cache_dir_env_var_precedence(monkeypatch): + monkeypatch.setenv(DVC_SITE_CACHE_DIR, "foo") + assert site_cache_dir(config_site_cache_dir="bar") == "foo"