From f5aa0da0ae02c8c680172775ab384ea0c8e39239 Mon Sep 17 00:00:00 2001 From: Ruslan Kuprieiev Date: Thu, 24 Jan 2019 17:02:07 +0200 Subject: [PATCH] stage: don't exclude md5s for deps/outs Signed-off-by: Ruslan Kuprieiev --- dvc/stage.py | 7 +++++-- tests/unit/stage.py | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 tests/unit/stage.py diff --git a/dvc/stage.py b/dvc/stage.py index 95060c6b6..196b22a43 100644 --- a/dvc/stage.py +++ b/dvc/stage.py @@ -465,11 +465,14 @@ class Stage(object): d = self.dumpd() + # NOTE: removing md5 manually in order to not affect md5s in deps/outs + if self.PARAM_MD5 in d.keys(): + del d[self.PARAM_MD5] + # NOTE: excluding parameters that don't affect the state of the # pipeline. Not excluding `OutputLOCAL.PARAM_CACHE`, because if # it has changed, we might not have that output in our cache. - return dict_md5(d, exclude=[self.PARAM_MD5, - self.PARAM_LOCKED, + return dict_md5(d, exclude=[self.PARAM_LOCKED, OutputLOCAL.PARAM_METRIC]) def save(self): diff --git a/tests/unit/stage.py b/tests/unit/stage.py new file mode 100644 index 000000000..2934643bc --- /dev/null +++ b/tests/unit/stage.py @@ -0,0 +1,19 @@ +import mock +from unittest import TestCase + +from dvc.stage import Stage + + +class TestStageChecksum(TestCase): + def test(self): + stage = Stage(None) + outs = [{'path': 'a', 'md5': '123456789'}] + deps = [{'path': 'b', 'md5': '987654321'}] + d = {'md5': '123456', + 'cmd': 'mycmd', + 'outs': outs, + 'deps': deps} + + with mock.patch.object(stage, 'dumpd', return_value=d): + self.assertEqual(stage._compute_md5(), + 'e9521a22111493406ea64a88cda63e0b')