add ignore_errors to local.remove()

--HG--
branch : trunk
This commit is contained in:
holger krekel 2010-06-07 20:48:36 +02:00
parent 10b8de060a
commit c1d0fc9aaf
3 changed files with 19 additions and 3 deletions

View File

@ -12,6 +12,7 @@ Bug fixes / Maintenance
- streamline py.path.local.mkdtemp implementation and usage
- don't print empty lines when showing junitxml-filename
- fix py.code.compile(source) to generate unique filenames
- add optional boolean ignore_errors parameter to py.path.local.remove
Changes between 1.3.0 and 1.3.1
==================================================

View File

@ -157,14 +157,18 @@ class LocalPath(FSBase):
def __lt__(self, other):
return str(self) < str(other)
def remove(self, rec=1):
""" remove a file or directory (or a directory tree if rec=1). """
def remove(self, rec=1, ignore_errors=False):
""" remove a file or directory (or a directory tree if rec=1).
if ignore_errors is True, errors while removing directories will
be ignored.
"""
if self.check(dir=1, link=0):
if rec:
# force remove of readonly files on windows
if iswin32:
self.chmod(448, rec=1) # octcal 0700
py.error.checked_call(py.std.shutil.rmtree, self.strpath)
py.error.checked_call(py.std.shutil.rmtree, self.strpath,
ignore_errors=ignore_errors)
else:
py.error.checked_call(os.rmdir, self.strpath)
else:

View File

@ -60,6 +60,17 @@ class TestLocalPath(common.CommonFSTests):
readonly_dir.remove()
assert not readonly_dir.check(exists=1)
def test_remove_routes_ignore_errors(self, tmpdir, monkeypatch):
l = []
monkeypatch.setattr(py.std.shutil, 'rmtree',
lambda *args, **kwargs: l.append(kwargs))
tmpdir.remove()
assert not l[0]['ignore_errors']
for val in (True, False):
l[:] = []
tmpdir.remove(ignore_errors=val)
assert l[0]['ignore_errors'] == val
def test_initialize_curdir(self):
assert str(local()) == py.std.os.getcwd()