diff --git a/dvc/repo/reproduce.py b/dvc/repo/reproduce.py index 100143279..9cbef4742 100644 --- a/dvc/repo/reproduce.py +++ b/dvc/repo/reproduce.py @@ -61,7 +61,11 @@ def _track_stage(stage): stage.repo.scm.track_file(stage.dvcfile.relpath) for dep in stage.deps: - if not dep.use_scm_ignore and dep.is_in_repo: + if ( + not dep.use_scm_ignore + and dep.is_in_repo + and not stage.repo.repo_fs.isdvc(dep.path_info) + ): stage.repo.scm.track_file(relpath(dep.path_info)) for out in stage.outs: if not out.use_scm_ignore and out.is_in_repo: diff --git a/dvc/scm/git/__init__.py b/dvc/scm/git/__init__.py index bc8fe5283..eb8f88473 100644 --- a/dvc/scm/git/__init__.py +++ b/dvc/scm/git/__init__.py @@ -272,10 +272,19 @@ class Git(Base): self.files_to_track = set() def remind_to_track(self): - if self.quiet or not self.files_to_track: + def _filter(files): + if not files: + return set() + staged, unstaged, untracked = self.status() + return files.intersection( + staged.get("modify", []) + unstaged + untracked + ) + + files_to_track = _filter(self.files_to_track) + if self.quiet or not files_to_track: return - files = " ".join(shlex.quote(path) for path in self.files_to_track) + files = " ".join(shlex.quote(path) for path in sorted(files_to_track)) logger.info( "\n" diff --git a/tests/unit/scm/test_git.py b/tests/unit/scm/test_git.py index b5bd78058..c952a7427 100644 --- a/tests/unit/scm/test_git.py +++ b/tests/unit/scm/test_git.py @@ -509,10 +509,20 @@ def test_reset(tmp_dir, scm, git): assert len(unstaged) == 2 -def test_remind_to_track(scm, caplog): - scm.files_to_track = ["fname with spaces.txt", "тест", "foo"] +def test_remind_to_track(tmp_dir, scm, caplog): + files = ["fname with spaces.txt", "тест", "foo"] + tmp_dir.gen({name: "foo" for name in files}) + scm.files_to_track.update(files) + scm.remind_to_track() - assert "git add 'fname with spaces.txt' 'тест' foo" in caplog.text + assert "git add 'fname with spaces.txt' foo 'тест'" in caplog.text + + scm.add(["foo"]) + caplog.clear() + + scm.remind_to_track() + assert "git add 'fname with spaces.txt' 'тест'" in caplog.text + assert "foo" not in caplog.text def test_add(tmp_dir, scm, git):