diff --git a/src/poetry/console/commands/show.py b/src/poetry/console/commands/show.py index 0f29ca35b5b..2e238147ad5 100644 --- a/src/poetry/console/commands/show.py +++ b/src/poetry/console/commands/show.py @@ -505,7 +505,7 @@ def find_latest_package( requires = root.all_requires for dep in requires: - if dep.name == package.name: + if dep.name == package.name and dep.source_type == package.source_type: provider = Provider(root, self.poetry.pool, NullIO()) return provider.search_for_direct_origin_dependency(dep) diff --git a/src/poetry/puzzle/provider.py b/src/poetry/puzzle/provider.py index b1fd6d10e19..114c7f2106f 100644 --- a/src/poetry/puzzle/provider.py +++ b/src/poetry/puzzle/provider.py @@ -243,7 +243,7 @@ def search_for_direct_origin_dependency(self, dependency: Dependency) -> Package else: raise RuntimeError( - f"Unknown direct dependency type {dependency.source_type}" + f"{dependency}: unknown direct dependency type {dependency.source_type}" ) if dependency.is_vcs(): diff --git a/tests/console/commands/test_show.py b/tests/console/commands/test_show.py index 5040b5f0684..ff8cebc2ce7 100644 --- a/tests/console/commands/test_show.py +++ b/tests/console/commands/test_show.py @@ -1924,3 +1924,71 @@ def test_show_errors_without_lock_file(tester: CommandTester, poetry: Poetry): expected = "Error: poetry.lock not found. Run `poetry lock` to create it.\n" assert tester.io.fetch_error() == expected assert tester.status_code == 1 + + +def test_show_dependency_installed_from_git_in_dev( + tester: CommandTester, + poetry: Poetry, + installed: Repository, + repo: TestRepository, +): + # Add a regular dependency for a package in main, and a git dependency for the same + # package in dev. + poetry.package.add_dependency(Factory.create_dependency("demo", "^0.1.1")) + poetry.package.add_dependency( + Factory.create_dependency( + "demo", {"git": "https://github.com/demo/demo.git"}, groups=["dev"] + ) + ) + + demo_011 = get_package("demo", "0.1.1") + demo_011.description = "Demo package" + repo.add_package(demo_011) + + pendulum_200 = get_package("pendulum", "2.0.0") + pendulum_200.description = "Pendulum package" + repo.add_package(pendulum_200) + + # The git package is the one that gets into the lockfile. + poetry.locker.mock_lock_data( + { + "package": [ + { + "name": "demo", + "version": "0.1.2", + "description": "Demo package", + "category": "main", + "optional": False, + "python-versions": "*", + "develop": False, + "source": { + "type": "git", + "reference": MOCK_DEFAULT_GIT_REVISION, + "resolved_reference": MOCK_DEFAULT_GIT_REVISION, + "url": "https://github.com/demo/demo.git", + }, + }, + { + "name": "pendulum", + "version": "2.0.0", + "description": "Pendulum package", + "category": "main", + "optional": False, + "platform": "*", + "python-versions": "*", + "checksum": [], + }, + ], + "metadata": { + "python-versions": "*", + "platform": "*", + "content-hash": "123456789", + "hashes": {"demo": [], "pendulum": []}, + }, + } + ) + + # Nothing needs updating, there is no confusion between the git and not-git + # packages. + tester.execute("--outdated") + assert tester.io.fetch_output() == ""