From fb756c0538cedafca092346a854529eaa3bde3b2 Mon Sep 17 00:00:00 2001 From: gsvolt <46934+gsvolt@users.noreply.github.com> Date: Tue, 29 Sep 2020 21:02:44 -0400 Subject: [PATCH] application_process: scm: Git: _add_entry_to_gitignore: writes unique entry to .gitignore (#4624) * scm: Git: _add_entry_to_gitignore: writes unique entry to .gitignore Fixes #4327 * Restyled by black Co-authored-by: Restyled.io --- dvc/scm/git.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/dvc/scm/git.py b/dvc/scm/git.py index a3317218ea..d5d72c1b84 100644 --- a/dvc/scm/git.py +++ b/dvc/scm/git.py @@ -210,6 +210,7 @@ def _add_entry_to_gitignore(self, entry, gitignore): entry = GitWildMatchPattern.escape(entry) with open(gitignore, "a+", encoding="utf-8") as fobj: + unique_lines = set(fobj.readlines()) fobj.seek(0, os.SEEK_END) if fobj.tell() == 0: # Empty file @@ -218,7 +219,9 @@ def _add_entry_to_gitignore(self, entry, gitignore): fobj.seek(fobj.tell() - 1, os.SEEK_SET) last = fobj.read(1) prefix = "" if last == "\n" else "\n" - fobj.write(f"{prefix}{entry}\n") + new_entry = f"{prefix}{entry}\n" + if new_entry not in unique_lines: + fobj.write(new_entry) def ignore_remove(self, path): entry, gitignore = self._get_gitignore(path)