mirror of https://github.com/pypa/pip
Merge pull request #8462 from pfmoore/nr_nonlocal_compatible_wheel_path
Test is checking the old resolver's broken behaviour
This commit is contained in:
commit
4abb40e201
|
@ -269,6 +269,7 @@ class InstallCommand(RequirementCommand):
|
|||
# Create a target directory for using with the target option
|
||||
target_temp_dir = TempDirectory(kind="target")
|
||||
target_temp_dir_path = target_temp_dir.path
|
||||
self.enter_context(target_temp_dir)
|
||||
|
||||
global_options = options.global_options or []
|
||||
|
||||
|
@ -452,54 +453,53 @@ class InstallCommand(RequirementCommand):
|
|||
# packages to be moved to target directory
|
||||
lib_dir_list = []
|
||||
|
||||
with target_temp_dir:
|
||||
# Checking both purelib and platlib directories for installed
|
||||
# packages to be moved to target directory
|
||||
scheme = distutils_scheme('', home=target_temp_dir.path)
|
||||
purelib_dir = scheme['purelib']
|
||||
platlib_dir = scheme['platlib']
|
||||
data_dir = scheme['data']
|
||||
# Checking both purelib and platlib directories for installed
|
||||
# packages to be moved to target directory
|
||||
scheme = distutils_scheme('', home=target_temp_dir.path)
|
||||
purelib_dir = scheme['purelib']
|
||||
platlib_dir = scheme['platlib']
|
||||
data_dir = scheme['data']
|
||||
|
||||
if os.path.exists(purelib_dir):
|
||||
lib_dir_list.append(purelib_dir)
|
||||
if os.path.exists(platlib_dir) and platlib_dir != purelib_dir:
|
||||
lib_dir_list.append(platlib_dir)
|
||||
if os.path.exists(data_dir):
|
||||
lib_dir_list.append(data_dir)
|
||||
if os.path.exists(purelib_dir):
|
||||
lib_dir_list.append(purelib_dir)
|
||||
if os.path.exists(platlib_dir) and platlib_dir != purelib_dir:
|
||||
lib_dir_list.append(platlib_dir)
|
||||
if os.path.exists(data_dir):
|
||||
lib_dir_list.append(data_dir)
|
||||
|
||||
for lib_dir in lib_dir_list:
|
||||
for item in os.listdir(lib_dir):
|
||||
if lib_dir == data_dir:
|
||||
ddir = os.path.join(data_dir, item)
|
||||
if any(s.startswith(ddir) for s in lib_dir_list[:-1]):
|
||||
continue
|
||||
target_item_dir = os.path.join(target_dir, item)
|
||||
if os.path.exists(target_item_dir):
|
||||
if not upgrade:
|
||||
logger.warning(
|
||||
'Target directory %s already exists. Specify '
|
||||
'--upgrade to force replacement.',
|
||||
target_item_dir
|
||||
)
|
||||
continue
|
||||
if os.path.islink(target_item_dir):
|
||||
logger.warning(
|
||||
'Target directory %s already exists and is '
|
||||
'a link. pip will not automatically replace '
|
||||
'links, please remove if replacement is '
|
||||
'desired.',
|
||||
target_item_dir
|
||||
)
|
||||
continue
|
||||
if os.path.isdir(target_item_dir):
|
||||
shutil.rmtree(target_item_dir)
|
||||
else:
|
||||
os.remove(target_item_dir)
|
||||
for lib_dir in lib_dir_list:
|
||||
for item in os.listdir(lib_dir):
|
||||
if lib_dir == data_dir:
|
||||
ddir = os.path.join(data_dir, item)
|
||||
if any(s.startswith(ddir) for s in lib_dir_list[:-1]):
|
||||
continue
|
||||
target_item_dir = os.path.join(target_dir, item)
|
||||
if os.path.exists(target_item_dir):
|
||||
if not upgrade:
|
||||
logger.warning(
|
||||
'Target directory %s already exists. Specify '
|
||||
'--upgrade to force replacement.',
|
||||
target_item_dir
|
||||
)
|
||||
continue
|
||||
if os.path.islink(target_item_dir):
|
||||
logger.warning(
|
||||
'Target directory %s already exists and is '
|
||||
'a link. pip will not automatically replace '
|
||||
'links, please remove if replacement is '
|
||||
'desired.',
|
||||
target_item_dir
|
||||
)
|
||||
continue
|
||||
if os.path.isdir(target_item_dir):
|
||||
shutil.rmtree(target_item_dir)
|
||||
else:
|
||||
os.remove(target_item_dir)
|
||||
|
||||
shutil.move(
|
||||
os.path.join(lib_dir, item),
|
||||
target_item_dir
|
||||
)
|
||||
shutil.move(
|
||||
os.path.join(lib_dir, item),
|
||||
target_item_dir
|
||||
)
|
||||
|
||||
def _warn_about_conflicts(self, to_install):
|
||||
try:
|
||||
|
|
|
@ -927,8 +927,11 @@ def test_install_nonlocal_compatible_wheel(script, data):
|
|||
assert result.returncode == ERROR
|
||||
|
||||
|
||||
@pytest.mark.fails_on_new_resolver
|
||||
def test_install_nonlocal_compatible_wheel_path(script, data):
|
||||
def test_install_nonlocal_compatible_wheel_path(
|
||||
script,
|
||||
data,
|
||||
use_new_resolver
|
||||
):
|
||||
target_dir = script.scratch_path / 'target'
|
||||
|
||||
# Test a full path requirement
|
||||
|
@ -937,12 +940,16 @@ def test_install_nonlocal_compatible_wheel_path(script, data):
|
|||
'-t', target_dir,
|
||||
'--no-index',
|
||||
'--only-binary=:all:',
|
||||
Path(data.packages) / 'simplewheel-2.0-py3-fakeabi-fakeplat.whl'
|
||||
Path(data.packages) / 'simplewheel-2.0-py3-fakeabi-fakeplat.whl',
|
||||
expect_error=use_new_resolver
|
||||
)
|
||||
assert result.returncode == SUCCESS
|
||||
if use_new_resolver:
|
||||
assert result.returncode == ERROR
|
||||
else:
|
||||
assert result.returncode == SUCCESS
|
||||
|
||||
distinfo = Path('scratch') / 'target' / 'simplewheel-2.0.dist-info'
|
||||
result.did_create(distinfo)
|
||||
distinfo = Path('scratch') / 'target' / 'simplewheel-2.0.dist-info'
|
||||
result.did_create(distinfo)
|
||||
|
||||
# Test a full path requirement (without --target)
|
||||
result = script.pip(
|
||||
|
|
Loading…
Reference in New Issue