Adds a test for and fixes #112. If attempting to write to the __pycache__ directory raises a permission error _write_pyc() should just return False to prevent any further write attempts.
This commit is contained in:
parent
c294a417bd
commit
b1595d3f61
|
@ -177,6 +177,10 @@ def _write_pyc(co, source_path, pyc):
|
|||
# This happens when we get a EEXIST in find_module creating the
|
||||
# __pycache__ directory and __pycache__ is by some non-dir node.
|
||||
return False
|
||||
elif err == errno.EACCES:
|
||||
# The directory is read-only; this can happen for example when
|
||||
# running the tests in a package installed as root
|
||||
return False
|
||||
raise
|
||||
try:
|
||||
fp.write(imp.get_magic())
|
||||
|
|
|
@ -1,4 +1,5 @@
|
|||
import os
|
||||
import stat
|
||||
import sys
|
||||
import zipfile
|
||||
import py
|
||||
|
@ -323,6 +324,18 @@ def test_rewritten():
|
|||
assert "@py_builtins" in globals()""")
|
||||
assert testdir.runpytest().ret == 0
|
||||
|
||||
def test_pycache_is_readonly(self, testdir):
|
||||
cache = testdir.tmpdir.mkdir("__pycache__")
|
||||
old_mode = cache.stat().mode
|
||||
cache.chmod(old_mode ^ stat.S_IWRITE)
|
||||
testdir.makepyfile("""
|
||||
def test_rewritten():
|
||||
assert "@py_builtins" in globals()""")
|
||||
try:
|
||||
assert testdir.runpytest().ret == 0
|
||||
finally:
|
||||
cache.chmod(old_mode)
|
||||
|
||||
def test_zipfile(self, testdir):
|
||||
z = testdir.tmpdir.join("myzip.zip")
|
||||
z_fn = str(z)
|
||||
|
@ -346,8 +359,12 @@ import test_gum.test_lizard""" % (z_fn,))
|
|||
def test_rewritten():
|
||||
assert "@py_builtins" in globals()
|
||||
""").encode("utf-8"), "wb")
|
||||
old_mode = sub.stat().mode
|
||||
sub.chmod(320)
|
||||
assert testdir.runpytest().ret == 0
|
||||
try:
|
||||
assert testdir.runpytest().ret == 0
|
||||
finally:
|
||||
sub.chmod(old_mode)
|
||||
|
||||
def test_dont_write_bytecode(self, testdir, monkeypatch):
|
||||
testdir.makepyfile("""
|
||||
|
|
Loading…
Reference in New Issue