diff --git a/dvc/repo/__init__.py b/dvc/repo/__init__.py index 33c14b80a..dea0f4558 100644 --- a/dvc/repo/__init__.py +++ b/dvc/repo/__init__.py @@ -93,6 +93,7 @@ class Repo: from dvc.repo.status import status # type: ignore[misc] from dvc.repo.update import update # type: ignore[misc] + from .cache import check_missing as cache_check_missing # type: ignore[misc] from .data import status as data_status # type: ignore[misc] ls = staticmethod(_ls) diff --git a/dvc/repo/cache.py b/dvc/repo/cache.py new file mode 100644 index 000000000..7d86b9550 --- /dev/null +++ b/dvc/repo/cache.py @@ -0,0 +1,25 @@ +import os + + +def check_missing(repo, rev=None): + from dvc_data.index import StorageKeyError + + with repo.switch(rev or "workspace"): + index = repo.index.data["repo"] + + def onerror(_entry, _exc): + pass + + index.onerror = onerror + + ret = [] + for _, entry in index.iteritems(): + try: + fs, path = index.storage_map.get_cache(entry) + except (StorageKeyError, ValueError): + continue + + if not fs.exists(path): + ret.append(os.path.join(*entry.key)) + + return ret