From c5648a33ec9743c9f9712fda423755d39975cdd5 Mon Sep 17 00:00:00 2001 From: Ruslan Kuprieiev Date: Wed, 22 Nov 2017 15:02:28 +0200 Subject: [PATCH] merge: don't forget to checkout cache_state file Signed-off-by: Ruslan Kuprieiev --- dvc/command/checkout.py | 5 +++-- dvc/command/merge.py | 21 ++++++++++++--------- functest/test-merge.sh | 4 ++-- 3 files changed, 17 insertions(+), 13 deletions(-) diff --git a/dvc/command/checkout.py b/dvc/command/checkout.py index efa58fa9c..fac80661e 100644 --- a/dvc/command/checkout.py +++ b/dvc/command/checkout.py @@ -22,9 +22,10 @@ class CmdCheckout(CmdBase): return True - def checkout(self, items): + @staticmethod + def checkout(items): for item in items: - if self.cache_ok(item): + if CmdCheckout.cache_ok(item): continue if os.path.isfile(item.data.relative): diff --git a/dvc/command/merge.py b/dvc/command/merge.py index 9fa2c2cca..8228baac3 100644 --- a/dvc/command/merge.py +++ b/dvc/command/merge.py @@ -6,6 +6,8 @@ from dvc.logger import Logger from dvc.state_file import StateFile from dvc.path.data_item import DataItem from dvc.system import System +from dvc.command.checkout import CmdCheckout + class CmdMerge(CmdBase): @@ -33,7 +35,7 @@ class CmdMerge(CmdBase): for item in items: try: - state = StateFile.load(item, self.git) + state = StateFile.load(item, self.settings) except Exception as ex: Logger.error('Failed to load state file for {}'.format(item.data.relative), exc_info=True) return None @@ -49,16 +51,17 @@ class CmdMerge(CmdBase): data = [] for item in targets: self.git.checkout_file_before_last_merge(item.state.relative) + self.git.checkout_file_before_last_merge(item.cache_state.relative) - # Reload data item, so we can get restored cache - new_item = self.settings.path_factory.data_item(item.data.relative) - if os.path.isfile(new_item.data.relative): - os.remove(new_item.data.relative) - - System.hardlink(new_item.cache.relative, new_item.data.relative) - - data.append(item.data.relative) + CmdCheckout.checkout([item]) +# if os.path.isfile(item.data.relative): +# os.remove(item.data.relative) +# +# System.hardlink(item.cache.relative, item.data.relative) +# +# data.append(item.data.relative) +# msg = 'DVC merge files: {}'.format(' '.join(data)) self.commit_if_needed(msg) diff --git a/functest/test-merge.sh b/functest/test-merge.sh index 0a9e1a949..514e7a7fc 100755 --- a/functest/test-merge.sh +++ b/functest/test-merge.sh @@ -45,11 +45,11 @@ git merge bar # way dvc knows to favor data files from current branch. dvc merge -# Verify that data and respective state file are restored properly +# Verify that data and respective cache state file are restored properly if [ "$(dvc_md5 data/data)" != "$ORIG_DATA" ]; then dvc_fail fi -grep $(echo "$ORIG_DATA" | cut -d " " -f1) .dvc/state/data/data.state || dvc_fail +grep $(echo "$ORIG_DATA" | cut -d " " -f1) .dvc/state/data/data.cache_state || dvc_fail dvc_pass