mirror of
https://github.com/Stone-Red-Code/dvc.git
synced 2026-11-08 23:09:48 +01:00
+8
-2
@@ -3,7 +3,7 @@ import os
|
||||
import tempfile
|
||||
from contextlib import contextmanager
|
||||
|
||||
from funcy import first
|
||||
from funcy import cached_property, first
|
||||
from voluptuous import Invalid
|
||||
|
||||
from dvc.cache.local import _log_exceptions
|
||||
@@ -48,7 +48,10 @@ def _get_stage_hash(stage):
|
||||
class StageCache:
|
||||
def __init__(self, repo):
|
||||
self.repo = repo
|
||||
self.cache_dir = os.path.join(repo.cache.local.cache_dir, "runs")
|
||||
|
||||
@cached_property
|
||||
def cache_dir(self):
|
||||
return os.path.join(self.repo.cache.local.cache_dir, "runs")
|
||||
|
||||
@property
|
||||
def tree(self):
|
||||
@@ -129,6 +132,9 @@ class StageCache:
|
||||
yield out
|
||||
|
||||
def save(self, stage):
|
||||
if stage.is_callback or stage.always_changed:
|
||||
return
|
||||
|
||||
cache_key = _get_stage_hash(stage)
|
||||
if not cache_key:
|
||||
return
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
import os
|
||||
|
||||
import pytest
|
||||
|
||||
|
||||
def test_stage_cache(tmp_dir, dvc, mocker):
|
||||
tmp_dir.gen("dep", "dep")
|
||||
@@ -204,3 +206,19 @@ def test_shared_stage_cache(tmp_dir, dvc, run_copy):
|
||||
assert _mode(parent_cache_dir) == dir_mode
|
||||
assert _mode(cache_dir) == dir_mode
|
||||
assert _mode(cache_file) == file_mode
|
||||
|
||||
|
||||
def test_always_changed(mocker):
|
||||
from dvc.repo import Repo
|
||||
from dvc.stage import Stage
|
||||
from dvc.stage.cache import RunCacheNotFoundError, StageCache
|
||||
|
||||
repo = mocker.Mock(spec=Repo)
|
||||
cache = StageCache(repo)
|
||||
stage = Stage(repo, always_changed=True)
|
||||
get_stage_hash = mocker.patch("dvc.stage.cache._get_stage_hash")
|
||||
assert cache.save(stage) is None
|
||||
assert get_stage_hash.not_called
|
||||
with pytest.raises(RunCacheNotFoundError):
|
||||
cache.restore(stage)
|
||||
assert get_stage_hash.not_called
|
||||
|
||||
Reference in New Issue
Block a user