mirror of https://github.com/pypa/pip
Add a test demonstrating #7966
This commit is contained in:
parent
87aaae0e08
commit
037791d170
|
@ -2,7 +2,10 @@ import json
|
|||
|
||||
import pytest
|
||||
|
||||
from tests.lib import create_basic_wheel_for_package
|
||||
from tests.lib import (
|
||||
create_basic_sdist_for_package,
|
||||
create_basic_wheel_for_package,
|
||||
)
|
||||
|
||||
|
||||
def assert_installed(script, **kwargs):
|
||||
|
@ -253,3 +256,41 @@ def test_new_resolver_ignore_installed(script):
|
|||
assert script.site_packages / "base" in result.files_updated, (
|
||||
"base 0.1.0 not reinstalled"
|
||||
)
|
||||
|
||||
|
||||
def test_new_resolver_only_builds_sdists_when_needed(script):
|
||||
create_basic_wheel_for_package(
|
||||
script,
|
||||
"base",
|
||||
"0.1.0",
|
||||
depends=["dep"],
|
||||
)
|
||||
create_basic_sdist_for_package(
|
||||
script,
|
||||
"dep",
|
||||
"0.1.0",
|
||||
# Replace setup.py with something that fails
|
||||
extra_files={"setup.py": "assert False"},
|
||||
)
|
||||
create_basic_sdist_for_package(
|
||||
script,
|
||||
"dep",
|
||||
"0.2.0",
|
||||
)
|
||||
# We only ever need to check dep 0.2.0 as it's the latest version
|
||||
script.pip(
|
||||
"install", "--unstable-feature=resolver",
|
||||
"--no-cache-dir", "--no-index",
|
||||
"--find-links", script.scratch_path,
|
||||
"base"
|
||||
)
|
||||
assert_installed(script, base="0.1.0", dep="0.2.0")
|
||||
|
||||
# We merge criteria here, as we have two "dep" requirements
|
||||
script.pip(
|
||||
"install", "--unstable-feature=resolver",
|
||||
"--no-cache-dir", "--no-index",
|
||||
"--find-links", script.scratch_path,
|
||||
"base", "dep"
|
||||
)
|
||||
assert_installed(script, base="0.1.0", dep="0.2.0")
|
||||
|
|
|
@ -15,7 +15,7 @@ from textwrap import dedent
|
|||
from zipfile import ZipFile
|
||||
|
||||
import pytest
|
||||
from pip._vendor.six import PY2
|
||||
from pip._vendor.six import PY2, ensure_binary, text_type
|
||||
from scripttest import FoundDir, TestFileEnvironment
|
||||
|
||||
from pip._internal.index.collector import LinkCollector
|
||||
|
@ -1036,6 +1036,56 @@ def create_basic_wheel_for_package(
|
|||
return archive_path
|
||||
|
||||
|
||||
def create_basic_sdist_for_package(
|
||||
script, name, version, extra_files=None
|
||||
):
|
||||
files = {
|
||||
"setup.py": """
|
||||
from setuptools import find_packages, setup
|
||||
setup(name={name!r}, version={version!r})
|
||||
""",
|
||||
}
|
||||
|
||||
# Some useful shorthands
|
||||
archive_name = "{name}-{version}.tar.gz".format(
|
||||
name=name, version=version
|
||||
)
|
||||
|
||||
# Replace key-values with formatted values
|
||||
for key, value in list(files.items()):
|
||||
del files[key]
|
||||
key = key.format(name=name)
|
||||
files[key] = textwrap.dedent(value).format(
|
||||
name=name, version=version
|
||||
).strip()
|
||||
|
||||
# Add new files after formatting
|
||||
if extra_files:
|
||||
files.update(extra_files)
|
||||
|
||||
for fname in files:
|
||||
path = script.temp_path / fname
|
||||
path.parent.mkdir(exist_ok=True, parents=True)
|
||||
path.write_bytes(ensure_binary(files[fname]))
|
||||
|
||||
# The base_dir cast is required to make `shutil.make_archive()` use
|
||||
# Unicode paths on Python 2, making it able to properly archive
|
||||
# files with non-ASCII names.
|
||||
retval = script.scratch_path / archive_name
|
||||
generated = shutil.make_archive(
|
||||
retval,
|
||||
'gztar',
|
||||
root_dir=script.temp_path,
|
||||
base_dir=text_type(os.curdir),
|
||||
)
|
||||
shutil.move(generated, retval)
|
||||
|
||||
shutil.rmtree(script.temp_path)
|
||||
script.temp_path.mkdir()
|
||||
|
||||
return retval
|
||||
|
||||
|
||||
def need_executable(name, check_cmd):
|
||||
def wrapper(fn):
|
||||
try:
|
||||
|
|
Loading…
Reference in New Issue