From 423d620b89417c83dc8e75a039cdaea9ce8ec53c Mon Sep 17 00:00:00 2001 From: "Mr. Outis" Date: Wed, 14 Nov 2018 10:53:02 -0600 Subject: [PATCH] checkout: Clean working directory changes of tracked dir Fix #1326 --- dvc/remote/local.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/dvc/remote/local.py b/dvc/remote/local.py index 317c47dbf..8816b1307 100644 --- a/dvc/remote/local.py +++ b/dvc/remote/local.py @@ -337,11 +337,30 @@ class RemoteLOCAL(RemoteBase): if bar: progress.update_target(dir_relpath, processed, dir_size) + self._discard_working_directory_changes(path, dir_info) + self.state.update_link(path) if bar: progress.finish_target(dir_relpath) + def _discard_working_directory_changes(self, path, dir_info): + working_dir_files = set( + os.path.join(root, file) + for root, _, files in os.walk(path) + for file in files + ) + + cached_files = set( + os.path.join(path, file['relpath']) + for file in dir_info + ) + + delta = working_dir_files - cached_files + + for file in delta: + remove(file) + def _move(self, inp, outp): # moving in two stages to make last the move atomic in # case inp and outp are in different filesystems