Make use of our own rmtree to work around an issue on Windows with readonly files.

This commit is contained in:
Jannis Leidel 2011-03-19 20:57:37 +01:00
parent f903eb0dd0
commit afc2464772
5 changed files with 16 additions and 12 deletions

View File

@ -24,8 +24,8 @@ __all__ = ['rmtree', 'display_path', 'backup_dir',
'cache_download', 'unpack_file'] 'cache_download', 'unpack_file']
def rmtree(dir): def rmtree(dir, ignore_errors=True):
shutil.rmtree(dir, ignore_errors=True, shutil.rmtree(dir, ignore_errors=ignore_errors,
onerror=rmtree_errorhandler) onerror=rmtree_errorhandler)

View File

@ -13,6 +13,7 @@ else:
_base = os.path.supports_unicode_filenames and unicode or str _base = os.path.supports_unicode_filenames and unicode or str
from pip.util import rmtree
class Path(_base): class Path(_base):
""" Models a path in an object oriented way. """ """ Models a path in an object oriented way. """
@ -180,7 +181,7 @@ class Path(_base):
def rmtree(self, noerrors=True): def rmtree(self, noerrors=True):
""" Removes a directory tree. Ignores errors by default. """ """ Removes a directory tree. Ignores errors by default. """
return shutil.rmtree(self, ignore_errors=noerrors) return rmtree(self, ignore_errors=noerrors)
def copy(self, to): def copy(self, to):
shutil.copy(self, to) shutil.copy(self, to)

View File

@ -1,11 +1,13 @@
import os
import re import re
import sys import sys
import os
import subprocess import subprocess
import shutil import shutil
from pip.backwardcompat import urllib
from os.path import dirname, abspath from os.path import dirname, abspath
from pip.backwardcompat import urllib
from pip.util import rmtree
src_folder = dirname(dirname(abspath(__file__))) src_folder = dirname(dirname(abspath(__file__)))
@ -76,12 +78,12 @@ def _test_packages(output, pending_fn):
print('Installation of %s succeeded' % package) print('Installation of %s succeeded' % package)
add_package(os.path.join(output, 'success.txt'), package) add_package(os.path.join(output, 'success.txt'), package)
pop_last_item(pending_fn, package) pop_last_item(pending_fn, package)
shutil.rmtree(dest_dir) rmtree(dest_dir)
def create_venv(dest_dir): def create_venv(dest_dir):
if os.path.exists(dest_dir): if os.path.exists(dest_dir):
shutil.rmtree(dest_dir) rmtree(dest_dir)
print('Creating virtualenv in %s' % dest_dir) print('Creating virtualenv in %s' % dest_dir)
code = subprocess.check_call(['virtualenv', '--no-site-packages', dest_dir]) code = subprocess.check_call(['virtualenv', '--no-site-packages', dest_dir])
assert not code, "virtualenv failed" assert not code, "virtualenv failed"

View File

@ -8,6 +8,7 @@ import atexit
import textwrap import textwrap
from scripttest import TestFileEnvironment from scripttest import TestFileEnvironment
from tests.path import Path, curdir, u from tests.path import Path, curdir, u
from pip.util import rmtree
pyversion = sys.version[:3] pyversion = sys.version[:3]
@ -96,7 +97,7 @@ def install_setuptools(env):
shutil.copy2(f, tempdir) shutil.copy2(f, tempdir)
return env.run(os.path.join(tempdir, 'easy_install'), version) return env.run(os.path.join(tempdir, 'easy_install'), version)
finally: finally:
shutil.rmtree(tempdir) rmtree(tempdir)
env = None env = None
@ -129,7 +130,7 @@ class TestFailure(AssertionError):
def _cleanup(): def _cleanup():
global env global env
del env del env
shutil.rmtree(download_cache, ignore_errors=True) rmtree(download_cache, ignore_errors=True)
atexit.register(_cleanup) atexit.register(_cleanup)
@ -354,7 +355,7 @@ class TestPipEnvironment(TestFileEnvironment):
return TestPipResult(super(TestPipEnvironment, self).run(cwd=cwd, *args, **kw), verbose=self.verbose) return TestPipResult(super(TestPipEnvironment, self).run(cwd=cwd, *args, **kw), verbose=self.verbose)
def __del__(self): def __del__(self):
shutil.rmtree(str(self.root_path), ignore_errors=True) rmtree(str(self.root_path), ignore_errors=True)
def _use_cached_pypi_server(self): def _use_cached_pypi_server(self):
site_packages = self.root_path / self.site_packages site_packages = self.root_path / self.site_packages
@ -411,7 +412,7 @@ class FastTestPipEnvironment(TestPipEnvironment):
self.environ['PATH'] = Path.pathsep.join((self.bin_path, self.environ['PATH'])) self.environ['PATH'] = Path.pathsep.join((self.bin_path, self.environ['PATH']))
if self.root_path.exists: if self.root_path.exists:
shutil.rmtree(self.root_path) rmtree(self.root_path)
if self.backup_path.exists: if self.backup_path.exists:
shutil.copytree(self.backup_path, self.root_path, True) shutil.copytree(self.backup_path, self.root_path, True)
else: else:

View File

@ -99,7 +99,7 @@ def test_uninstall_editable_with_source_outside_venv():
tmpdir = join(temp, 'virtualenv') tmpdir = join(temp, 'virtualenv')
_test_uninstall_editable_with_source_outside_venv(tmpdir) _test_uninstall_editable_with_source_outside_venv(tmpdir)
finally: finally:
shutil.rmtree(temp) rmtree(temp)
def _test_uninstall_editable_with_source_outside_venv(tmpdir): def _test_uninstall_editable_with_source_outside_venv(tmpdir):