Skip to content

Commit 3602b21

Browse files
adriangbradoering
andauthored
fix: installation of missing directory dependencies with --skip-directory (#7923)
Co-authored-by: Randy Döring <[email protected]>
1 parent 0af3f1e commit 3602b21

File tree

3 files changed

+29
-6
lines changed

3 files changed

+29
-6
lines changed

src/poetry/installation/installer.py

+9
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from __future__ import annotations
22

33
from typing import TYPE_CHECKING
4+
from typing import cast
45

56
from cleo.io.null_io import NullIO
67
from packaging.utils import canonicalize_name
@@ -21,6 +22,7 @@
2122

2223
from cleo.io.io import IO
2324
from packaging.utils import NormalizedName
25+
from poetry.core.packages.path_dependency import PathDependency
2426
from poetry.core.packages.project_package import ProjectPackage
2527

2628
from poetry.config.config import Config
@@ -336,6 +338,13 @@ def _do_install(self) -> int:
336338
# or optional and not requested, are dropped
337339
self._filter_operations(ops, lockfile_repo)
338340

341+
# Validate the dependencies
342+
for op in ops:
343+
dep = op.package.to_dependency()
344+
if dep.is_file() or dep.is_directory():
345+
dep = cast("PathDependency", dep)
346+
dep.validate(raise_error=True)
347+
339348
# Execute operations
340349
status = self._execute(ops)
341350

src/poetry/puzzle/provider.py

-6
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@
4343
from poetry.core.packages.directory_dependency import DirectoryDependency
4444
from poetry.core.packages.file_dependency import FileDependency
4545
from poetry.core.packages.package import Package
46-
from poetry.core.packages.path_dependency import PathDependency
4746
from poetry.core.packages.url_dependency import URLDependency
4847
from poetry.core.packages.vcs_dependency import VCSDependency
4948
from poetry.core.version.markers import BaseMarker
@@ -560,11 +559,6 @@ def complete_package(
560559
if locked is not None and locked.package.is_same_package_as(dep):
561560
continue
562561
self.search_for_direct_origin_dependency(dep)
563-
else:
564-
for dep in _dependencies:
565-
if dep.is_file() or dep.is_directory():
566-
dep = cast("PathDependency", dep)
567-
dep.validate(raise_error=True)
568562

569563
dependencies = self._get_dependencies_with_overrides(
570564
_dependencies, dependency_package

tests/console/commands/test_install.py

+20
Original file line numberDiff line numberDiff line change
@@ -437,3 +437,23 @@ def test_install_path_dependency_does_not_exist(
437437
else:
438438
with pytest.raises(ValueError, match="does not exist"):
439439
tester.execute(options)
440+
441+
442+
@pytest.mark.parametrize("options", ["", "--no-directory"])
443+
def test_install_missing_directory_dependency_with_no_directory(
444+
command_tester_factory: CommandTesterFactory,
445+
project_factory: ProjectFactory,
446+
fixture_dir: FixtureDirGetter,
447+
options: str,
448+
) -> None:
449+
poetry = _project_factory(
450+
"missing_directory_dependency", project_factory, fixture_dir
451+
)
452+
assert isinstance(poetry.locker, TestLocker)
453+
poetry.locker.locked(True)
454+
tester = command_tester_factory("install", poetry=poetry)
455+
if options:
456+
tester.execute(options)
457+
else:
458+
with pytest.raises(ValueError, match="does not exist"):
459+
tester.execute(options)

0 commit comments

Comments
 (0)