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