Skip to content

Commit 37f9312

Browse files
committed
Fix installation of editable dependencies in included groups: avoid duplicates and use path instead of version
1 parent 3312659 commit 37f9312

1 file changed

Lines changed: 21 additions & 5 deletions

File tree

finecode_builtin_handlers/src/finecode_builtin_handlers/prepare_envs_install_deps.py

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import asyncio
22
import dataclasses
3+
import pathlib
34

45
from finecode_extension_api import code_action
56
from finecode_extension_api.actions import prepare_envs as prepare_envs_action, install_deps_in_env as install_deps_in_env_action
@@ -55,7 +56,8 @@ async def run(
5556
dependencies = []
5657

5758
process_raw_deps(
58-
env_raw_deps, env_deps_config, dependencies, deps_groups
59+
env_raw_deps, env_deps_config, dependencies, deps_groups,
60+
project_def_path=env.project_def_path
5961
)
6062

6163
install_deps_payload = install_deps_in_env_action.InstallDepsInEnvRunPayload(
@@ -86,13 +88,26 @@ async def run(
8688

8789

8890
def process_raw_deps(
89-
raw_deps: list, env_deps_config, dependencies, deps_groups
91+
raw_deps: list, env_deps_config, dependencies, deps_groups,
92+
project_def_path: pathlib.Path, _seen: set[str] | None = None
9093
) -> None:
94+
if _seen is None:
95+
_seen = set()
9196
for raw_dep in raw_deps:
9297
if isinstance(raw_dep, str):
9398
name = dependency_config_utils.get_dependency_name(raw_dep)
94-
version_or_source = raw_dep[len(name) :]
95-
editable = env_deps_config.get(name, {}).get("editable", False)
99+
if name in _seen:
100+
continue
101+
_seen.add(name)
102+
dep_config = env_deps_config.get(name, {})
103+
editable = dep_config.get("editable", False)
104+
if editable and (raw_path := dep_config.get("path")):
105+
resolved = pathlib.Path(raw_path)
106+
if not resolved.is_absolute():
107+
resolved = (project_def_path.parent / resolved).resolve()
108+
version_or_source = f" @ file://{resolved.as_posix()}"
109+
else:
110+
version_or_source = raw_dep[len(name):]
96111
dependencies.append(
97112
{
98113
"name": name,
@@ -103,5 +118,6 @@ def process_raw_deps(
103118
elif isinstance(raw_dep, dict) and "include-group" in raw_dep:
104119
included_group_deps = deps_groups.get(raw_dep["include-group"], [])
105120
process_raw_deps(
106-
included_group_deps, env_deps_config, dependencies, deps_groups
121+
included_group_deps, env_deps_config, dependencies, deps_groups,
122+
project_def_path, _seen
107123
)

0 commit comments

Comments
 (0)