Skip to content

Commit

Permalink
cacheprovider: do not write README/.gitignore to existing dir
Browse files Browse the repository at this point in the history
  • Loading branch information
blueyed committed Nov 14, 2018
1 parent ce0ed9c commit bc28261
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 4 deletions.
1 change: 1 addition & 0 deletions changelog/4393.bugfix.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Do not create ``.gitignore``/``README.md`` files in existing cache directories.
11 changes: 9 additions & 2 deletions src/_pytest/cacheprovider.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,10 @@ def set(self, key, value):
"""
path = self._getvaluepath(key)
try:
if path.parent.is_dir():
cache_dir_exists_already = True
else:
cache_dir_exists_already = self._cachedir.exists()
path.parent.mkdir(exist_ok=True, parents=True)
except (IOError, OSError):
self.warn("could not create cache path {path}", path=path)
Expand All @@ -118,6 +122,7 @@ def set(self, key, value):
else:
with f:
json.dump(value, f, indent=2, sort_keys=True)
if not cache_dir_exists_already:
self._ensure_supporting_files()

def _ensure_supporting_files(self):
Expand All @@ -127,8 +132,10 @@ def _ensure_supporting_files(self):
if not readme_path.is_file():
readme_path.write_text(README_CONTENT)

msg = u"# created by pytest automatically, do not change\n*"
self._cachedir.joinpath(".gitignore").write_text(msg, encoding="UTF-8")
gitignore_path = self._cachedir.joinpath(".gitignore")
if not gitignore_path.is_file():
msg = u"# Created by pytest automatically.\n*"
gitignore_path.write_text(msg, encoding="UTF-8")


class LFPlugin(object):
Expand Down
27 changes: 25 additions & 2 deletions testing/test_cacheprovider.py
Original file line number Diff line number Diff line change
Expand Up @@ -897,5 +897,28 @@ def test_gitignore(testdir):
config = testdir.parseconfig()
cache = Cache.for_config(config)
cache.set("foo", "bar")
msg = "# created by pytest automatically, do not change\n*"
assert cache._cachedir.joinpath(".gitignore").read_text(encoding="UTF-8") == msg
msg = "# Created by pytest automatically.\n*"
gitignore_path = cache._cachedir.joinpath(".gitignore")
assert gitignore_path.read_text(encoding="UTF-8") == msg

# Does not overwrite existing/custom one.
gitignore_path.write_text("")
cache.set("something", "else")
assert gitignore_path.read_text(encoding="UTF-8") == ""


def test_does_not_create_boilerplate_in_existing_dirs(testdir):
from _pytest.cacheprovider import Cache

testdir.makeini(
"""
[pytest]
cache_dir = .
"""
)
config = testdir.parseconfig()
cache = Cache.for_config(config)
cache.set("foo", "bar")

assert not os.path.exists(".gitignore")
assert not os.path.exists("README.md")

0 comments on commit bc28261

Please sign in to comment.