run-cache: don't save always_changed stages (#4719)

Fixes #4335
This commit is contained in:
Ruslan Kuprieiev
2020-10-14 17:43:16 +03:00
committed by GitHub
parent 6a79111047
commit 32cef509b7
2 changed files with 26 additions and 2 deletions
+8 -2
View File
@@ -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
+18
View File
@@ -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