From 9ca54526037cb4fb73186cac3f26f601ac0dcd09 Mon Sep 17 00:00:00 2001 From: "Mr. Outis" Date: Tue, 23 Jul 2019 15:01:46 -0500 Subject: [PATCH 1/3] scm: reset tracked files after every operation Fix #1475 --- dvc/repo/scm_context.py | 1 + dvc/scm/base.py | 5 +++++ dvc/scm/git/__init__.py | 3 +++ 3 files changed, 9 insertions(+) diff --git a/dvc/repo/scm_context.py b/dvc/repo/scm_context.py index b5985b117..6f189c597 100644 --- a/dvc/repo/scm_context.py +++ b/dvc/repo/scm_context.py @@ -2,6 +2,7 @@ def scm_context(method): def run(repo, *args, **kw): try: result = method(repo, *args, **kw) + repo.scm.reset_tracked_files() repo.scm.reset_ignores() repo.scm.remind_to_track() return result diff --git a/dvc/scm/base.py b/dvc/scm/base.py index d7f5333e3..e52fafe99 100644 --- a/dvc/scm/base.py +++ b/dvc/scm/base.py @@ -126,6 +126,11 @@ class Base(object): Method to reset in-memory ignore storing mechanism. """ + def reset_tracked_files(self): + """ + Method to reset in-memory tracked files storing mechanism. + """ + def remind_to_track(self): """ Method to remind user to track newly created files handled by scm diff --git a/dvc/scm/git/__init__.py b/dvc/scm/git/__init__.py index 339e64339..04b42747d 100644 --- a/dvc/scm/git/__init__.py +++ b/dvc/scm/git/__init__.py @@ -245,6 +245,9 @@ class Git(Base): def reset_ignores(self): self.ignored_paths = [] + def reset_tracked_files(self): + self.files_to_track = [] + def remind_to_track(self): if not self.files_to_track: return From 405dfde23f064d953a3f4e67d2f4ccc496257858 Mon Sep 17 00:00:00 2001 From: "Mr. Outis" Date: Tue, 23 Jul 2019 15:44:22 -0500 Subject: [PATCH 2/3] use set instead of list for deduplication --- dvc/repo/scm_context.py | 2 +- dvc/scm/git/__init__.py | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dvc/repo/scm_context.py b/dvc/repo/scm_context.py index 6f189c597..c0b0ffb5b 100644 --- a/dvc/repo/scm_context.py +++ b/dvc/repo/scm_context.py @@ -2,9 +2,9 @@ def scm_context(method): def run(repo, *args, **kw): try: result = method(repo, *args, **kw) - repo.scm.reset_tracked_files() repo.scm.reset_ignores() repo.scm.remind_to_track() + repo.scm.reset_tracked_files() return result except Exception: repo.scm.cleanup_ignores() diff --git a/dvc/scm/git/__init__.py b/dvc/scm/git/__init__.py index 04b42747d..5dd043ee0 100644 --- a/dvc/scm/git/__init__.py +++ b/dvc/scm/git/__init__.py @@ -54,7 +54,7 @@ class Git(Base): self.git.git.update_environment(LD_LIBRARY_PATH=libpath) self.ignored_paths = [] - self.files_to_track = [] + self.files_to_track = set() @staticmethod def is_repo(root_dir): @@ -246,7 +246,7 @@ class Git(Base): self.ignored_paths = [] def reset_tracked_files(self): - self.files_to_track = [] + self.files_to_track = set() def remind_to_track(self): if not self.files_to_track: @@ -260,7 +260,7 @@ class Git(Base): ) def track_file(self, path): - self.files_to_track.append(path) + self.files_to_track.update(set(path)) def belongs_to_scm(self, path): basename = os.path.basename(path) From dc5dd1e443cfa0dd44e5d58d24466bc74befcb15 Mon Sep 17 00:00:00 2001 From: "Mr. Outis" Date: Sat, 27 Jul 2019 17:44:45 -0500 Subject: [PATCH 3/3] change set.update to set.add created a set with `{}` but resulted in a dictionary, making me think about `set` not supporting the `add` method. Thanks for the correction, @efiop ! Co-Authored-By: Ruslan Kuprieiev --- dvc/scm/git/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dvc/scm/git/__init__.py b/dvc/scm/git/__init__.py index 5dd043ee0..c0592e896 100644 --- a/dvc/scm/git/__init__.py +++ b/dvc/scm/git/__init__.py @@ -260,7 +260,7 @@ class Git(Base): ) def track_file(self, path): - self.files_to_track.update(set(path)) + self.files_to_track.add(path) def belongs_to_scm(self, path): basename = os.path.basename(path)