Commit cc8f59a3 by Sébastien Eustace Committed by Arun Babu Neelicattu

Fix the show command

parent 600c2285
......@@ -35,8 +35,11 @@ lists all packages available."""
def handle(self):
from clikit.utils.terminal import Terminal
from poetry.core.semver import Version
from poetry.io.null_io import NullIO
from poetry.puzzle.solver import Solver
from poetry.repositories.installed_repository import InstalledRepository
from poetry.repositories.pool import Pool
from poetry.repositories.repository import Repository
from poetry.utils.helpers import get_package_version_display_string
package = self.argument("package")
......@@ -48,7 +51,7 @@ lists all packages available."""
self._args.set_option("latest", True)
include_dev = not self.option("no-dev")
locked_repo = self.poetry.locker.locked_repository(include_dev)
locked_repo = self.poetry.locker.locked_repository(True)
# Show tree view if requested
if self.option("tree") and not package:
......@@ -65,6 +68,25 @@ lists all packages available."""
table = self.table(style="compact")
# table.style.line_vc_char = ""
locked_packages = locked_repo.packages
pool = Pool()
pool.add_repository(locked_repo)
solver = Solver(
self.poetry.package,
pool=pool,
installed=Repository(),
locked=locked_repo,
io=NullIO(),
)
solver.provider.load_deferred(False)
with solver.use_environment(self.env):
ops = solver.solve()
required_locked_packages = set([op.package for op in ops if not op.skipped])
if self.option("no-dev"):
required_locked_packages = [
p for p in locked_packages if p.category == "main"
]
if package:
pkg = None
......@@ -110,20 +132,11 @@ lists all packages available."""
latest_packages = {}
latest_statuses = {}
installed_repo = InstalledRepository.load(self.env)
skipped = []
python = Version.parse(".".join([str(i) for i in self.env.version_info[:3]]))
# Computing widths
for locked in locked_packages:
python_constraint = locked.python_constraint
if not python_constraint.allows(python) or not self.env.is_valid_for_marker(
locked.marker
):
skipped.append(locked)
if not show_all:
continue
if locked not in required_locked_packages and not show_all:
continue
current_length = len(locked.pretty_name)
if not self._io.output.supports_ansi():
......@@ -179,7 +192,7 @@ lists all packages available."""
color = "cyan"
name = locked.pretty_name
install_marker = ""
if locked in skipped:
if locked not in required_locked_packages:
if not show_all:
continue
......
......@@ -340,7 +340,12 @@ class VersionSolver:
# only has one version to choose from.
return 1
if dependency.name in self._locked:
locked = self._get_locked(dependency)
if locked and (
dependency.constraint.allows(locked.version)
or locked.is_prerelease()
and dependency.constraint.allows(locked.version.next_patch)
):
return 1
# VCS, URL, File or Directory dependencies
......@@ -377,17 +382,17 @@ class VersionSolver:
version = packages[0]
except IndexError:
version = None
else:
version = locked
if version is None:
# If there are no versions that satisfy the constraint,
# add an incompatibility that indicates that.
self._add_incompatibility(
Incompatibility([Term(dependency, True)], NoVersionsCause())
)
if version is None:
# If there are no versions that satisfy the constraint,
# add an incompatibility that indicates that.
self._add_incompatibility(
Incompatibility([Term(dependency, True)], NoVersionsCause())
)
return dependency.complete_name
return dependency.complete_name
else:
version = locked
version = self._provider.complete_package(version)
......@@ -451,10 +456,10 @@ class VersionSolver:
)
def _get_locked(self, dependency): # type: (Dependency) -> Union[Package, None]
if dependency.complete_name in self._use_latest:
if dependency.name in self._use_latest:
return
locked = self._locked.get(dependency.complete_name)
locked = self._locked.get(dependency.name)
if not locked:
return
......
......@@ -67,6 +67,7 @@ class Provider:
self._in_progress = False
self._overrides = {}
self._deferred_cache = {}
self._load_deferred = True
@property
def pool(self): # type: () -> Pool
......@@ -78,6 +79,9 @@ class Provider:
def set_overrides(self, overrides):
self._overrides = overrides
def load_deferred(self, load_deferred): # type: (bool) -> None
self._load_deferred = load_deferred
@contextmanager
def use_environment(self, env): # type: (Env) -> Provider
original_env = self._env
......@@ -436,16 +440,17 @@ class Provider:
else:
requires = package.requires
# Retrieving constraints for deferred dependencies
for r in requires:
if r.is_directory():
self.search_for_directory(r)
elif r.is_file():
self.search_for_file(r)
elif r.is_vcs():
self.search_for_vcs(r)
elif r.is_url():
self.search_for_url(r)
if self._load_deferred:
# Retrieving constraints for deferred dependencies
for r in requires:
if r.is_directory():
self.search_for_directory(r)
elif r.is_file():
self.search_for_file(r)
elif r.is_vcs():
self.search_for_vcs(r)
elif r.is_url():
self.search_for_url(r)
optional_dependencies = []
activated_extras = []
......
......@@ -386,9 +386,11 @@ class PackageNode(DFSNode):
continue
for pkg in self.packages:
if (
pkg.complete_name == dependency.complete_name
and dependency.constraint.allows(pkg.version)
if pkg.complete_name == dependency.complete_name and (
dependency.constraint.allows(pkg.version)
or dependency.allows_prereleases()
and pkg.version.is_prerelease()
and dependency.constraint.allows(pkg.version.stable)
):
# If there is already a child with this name
# we merge the requirements
......
......@@ -44,7 +44,7 @@ class Repository(BaseRepository):
if not isinstance(constraint, VersionConstraint):
constraint = parse_constraint(constraint)
allow_prereleases = dependency.allows_prereleases
allow_prereleases = dependency.allows_prereleases()
if isinstance(constraint, VersionRange):
if (
constraint.max is not None
......@@ -68,7 +68,10 @@ class Repository(BaseRepository):
ignored_pre_release_packages.append(package)
continue
if constraint.allows(package.version):
if constraint.allows(package.version) or (
package.is_prerelease()
and constraint.allows(package.version.next_patch)
):
packages.append(package)
return packages or ignored_pre_release_packages
......
......@@ -27,7 +27,7 @@ python = "~2.7 || ^3.4"
demo = { path = "../distributions/demo-0.1.0-py2.py3-none-any.whl" }
# Dir dependency with setup.py
my-package = { path = "../project_with_setup/" }
project-with-setup = { path = "../project_with_setup/" }
[tool.poetry.scripts]
......
Metadata-Version: 1.0
Name: my-package
Name: project-with-setup
Version: 0.1.2
Summary: Demo project.
Home-page: https://github.com/demo/demo
......
......@@ -4,7 +4,7 @@ from setuptools import setup
kwargs = dict(
name="my-package",
name="project-with-setup",
license="MIT",
version="0.1.2",
description="Demo project.",
......
......@@ -7,7 +7,15 @@ optional = false
python-versions = "*"
[[package]]
name = "my-package"
name = "pendulum"
version = "1.4.4"
description = ""
category = "main"
optional = false
python-versions = "*"
[[package]]
name = "project-with-setup"
version = "0.1.2"
develop = false
description = "Demo project."
......@@ -23,14 +31,6 @@ url = "tests/fixtures/project_with_setup"
cachy = {version = ">=0.2.0", extras = ["msgpack"]}
pendulum = ">=1.4.4"
[[package]]
name = "pendulum"
version = "1.4.4"
description = ""
category = "main"
optional = false
python-versions = "*"
[metadata]
python-versions = "*"
lock-version = "1.1"
......@@ -38,5 +38,5 @@ content-hash = "123456789"
[metadata.files]
cachy = []
my-package = []
project-with-setup = []
pendulum = []
......@@ -891,7 +891,7 @@ def test_run_installs_with_local_setuptools_directory(
):
file_path = fixtures_dir / "project_with_setup/"
package.add_dependency(
Factory.create_dependency("my-package", {"path": str(file_path)})
Factory.create_dependency("project-with-setup", {"path": str(file_path)})
)
repo.add_package(get_package("pendulum", "1.4.4"))
......
......@@ -859,7 +859,7 @@ def test_run_installs_with_local_setuptools_directory(
):
file_path = fixtures_dir / "project_with_setup/"
package.add_dependency(
Factory.create_dependency("my-package", {"path": str(file_path)})
Factory.create_dependency("project-with-setup", {"path": str(file_path)})
)
repo.add_package(get_package("pendulum", "1.4.4"))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment