Skip to content

Commit 9f64222

Browse files
committed
Handle circular dependency on root package (fix #118)
1 parent dd00a2f commit 9f64222

File tree

2 files changed

+8
-0
lines changed

2 files changed

+8
-0
lines changed

src/poetry_plugin_export/exporter.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ def _export_generic_txt(
101101
for dependency_package in get_project_dependency_packages(
102102
self._poetry.locker,
103103
project_requires=root.all_requires,
104+
root_package_name=root.name,
104105
project_python_marker=root.python_marker,
105106
extras=self._extras,
106107
):

src/poetry_plugin_export/walker.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ def get_python_version_region_markers(packages: list[Package]) -> list[BaseMarke
5252
def get_project_dependency_packages(
5353
locker: Locker,
5454
project_requires: list[Dependency],
55+
root_package_name: NormalizedName,
5556
project_python_marker: BaseMarker | None = None,
5657
extras: bool | Sequence[NormalizedName] | None = None,
5758
) -> Iterator[DependencyPackage]:
@@ -103,13 +104,15 @@ def get_project_dependency_packages(
103104
for package, dependency in get_project_dependencies(
104105
project_requires=selected,
105106
locked_packages=repository.packages,
107+
root_package_name=root_package_name,
106108
):
107109
yield DependencyPackage(dependency=dependency, package=package)
108110

109111

110112
def get_project_dependencies(
111113
project_requires: list[Dependency],
112114
locked_packages: list[Package],
115+
root_package_name: NormalizedName,
113116
) -> Iterable[tuple[Package, Dependency]]:
114117
# group packages entries by name, this is required because requirement might use
115118
# different constraints.
@@ -129,6 +132,7 @@ def get_project_dependencies(
129132
nested_dependencies = walk_dependencies(
130133
dependencies=project_requires,
131134
packages_by_name=packages_by_name,
135+
root_package_name=root_package_name,
132136
)
133137

134138
return nested_dependencies.items()
@@ -137,6 +141,7 @@ def get_project_dependencies(
137141
def walk_dependencies(
138142
dependencies: list[Dependency],
139143
packages_by_name: dict[str, list[Package]],
144+
root_package_name: NormalizedName,
140145
) -> dict[Package, Dependency]:
141146
nested_dependencies: dict[Package, Dependency] = {}
142147

@@ -145,6 +150,8 @@ def walk_dependencies(
145150
requirement = dependencies.pop(0)
146151
if (requirement, requirement.marker) in visited:
147152
continue
153+
if requirement.name == root_package_name:
154+
continue
148155
visited.add((requirement, requirement.marker))
149156

150157
locked_package = get_locked_package(

0 commit comments

Comments
 (0)