From c1d0fc9aaf1182fdb53c5acb6ca478fb22fd1685 Mon Sep 17 00:00:00 2001 From: holger krekel Date: Mon, 7 Jun 2010 20:48:36 +0200 Subject: [PATCH] add ignore_errors to local.remove() --HG-- branch : trunk --- CHANGELOG | 1 + py/_path/local.py | 10 +++++++--- testing/path/test_local.py | 11 +++++++++++ 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 391897561..4f5180eac 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -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 ================================================== diff --git a/py/_path/local.py b/py/_path/local.py index 460a963a6..683da58e7 100644 --- a/py/_path/local.py +++ b/py/_path/local.py @@ -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: diff --git a/testing/path/test_local.py b/testing/path/test_local.py index 15751281a..bdb2c75ce 100644 --- a/testing/path/test_local.py +++ b/testing/path/test_local.py @@ -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()