Commit 3602b217 by Adrian Garcia Badaracco Committed by GitHub

fix: installation of missing directory dependencies with --skip-directory (#7923)

Co-authored-by: Randy Döring <30527984+radoering@users.noreply.github.com>
parent 0af3f1e4
from __future__ import annotations
from typing import TYPE_CHECKING
from typing import cast
from cleo.io.null_io import NullIO
from packaging.utils import canonicalize_name
......@@ -21,6 +22,7 @@ if TYPE_CHECKING:
from cleo.io.io import IO
from packaging.utils import NormalizedName
from poetry.core.packages.path_dependency import PathDependency
from poetry.core.packages.project_package import ProjectPackage
from poetry.config.config import Config
......@@ -336,6 +338,13 @@ class Installer:
# or optional and not requested, are dropped
self._filter_operations(ops, lockfile_repo)
# Validate the dependencies
for op in ops:
dep = op.package.to_dependency()
if dep.is_file() or dep.is_directory():
dep = cast("PathDependency", dep)
dep.validate(raise_error=True)
# Execute operations
status = self._execute(ops)
......
......@@ -43,7 +43,6 @@ if TYPE_CHECKING:
from poetry.core.packages.directory_dependency import DirectoryDependency
from poetry.core.packages.file_dependency import FileDependency
from poetry.core.packages.package import Package
from poetry.core.packages.path_dependency import PathDependency
from poetry.core.packages.url_dependency import URLDependency
from poetry.core.packages.vcs_dependency import VCSDependency
from poetry.core.version.markers import BaseMarker
......@@ -560,11 +559,6 @@ class Provider:
if locked is not None and locked.package.is_same_package_as(dep):
continue
self.search_for_direct_origin_dependency(dep)
else:
for dep in _dependencies:
if dep.is_file() or dep.is_directory():
dep = cast("PathDependency", dep)
dep.validate(raise_error=True)
dependencies = self._get_dependencies_with_overrides(
_dependencies, dependency_package
......
......@@ -437,3 +437,23 @@ def test_install_path_dependency_does_not_exist(
else:
with pytest.raises(ValueError, match="does not exist"):
tester.execute(options)
@pytest.mark.parametrize("options", ["", "--no-directory"])
def test_install_missing_directory_dependency_with_no_directory(
command_tester_factory: CommandTesterFactory,
project_factory: ProjectFactory,
fixture_dir: FixtureDirGetter,
options: str,
) -> None:
poetry = _project_factory(
"missing_directory_dependency", project_factory, fixture_dir
)
assert isinstance(poetry.locker, TestLocker)
poetry.locker.locked(True)
tester = command_tester_factory("install", poetry=poetry)
if options:
tester.execute(options)
else:
with pytest.raises(ValueError, match="does not exist"):
tester.execute(options)
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