Skip to content

fix: SemVer constraints cannot resolve for packages served by a project [indices] entry #308

Description

@speak-agent

复现步骤

  1. 工程声明一个本地索引和一个走 SemVer 约束的依赖:
[indices]
acme = { path = "local-index" }

[dependencies.acme]
util = "^2.0"
  1. local-index/pkgs/a/acme.util.lua 里正常声明 namespace = "acme", name = "util"xpm 表里有 2.0.0
  2. mcpp build

期望行为

^2.0 解析为 2.0.0,与写死 util = "2.0.0" 时的行为一致 —— 后者能正常解析安装。

实际行为

dependency acme.util has SemVer constraint ^2.0 but the index entry
isn't cloned locally yet — run `mcpp index update` first

mcpp index update 对本地 path 索引毫无作用,用户没有任何出路。

根因

mcpp::pm::resolve_semver / try_merge_semvermcpp::pm::Fetcher&,内部直接 fetcher.read_xpkg_lua(ns, shortName) —— 只读全局 registry(<XLINGS_HOME>/data)。而依赖解析本身走的是 mcpp.pm.index_route 的三路分发(本地 path 索引 / 项目 clone / 全局 registry)。

即:候选选择阶段能通过项目索引找到这个包,版本解析阶段却看不见它。同一族缺陷在 #305/#307 里已经修过 mcpp add 那一侧,resolve_semver 是当时明确记为后续的最后一处。

涉及模块

  • src/pm/resolver.cppm
  • src/build/prepare.cppm(两个调用点:依赖 SemVer 解析、约束合并)
  • src/scaffold/create.cppmmcpp new --template"*" 解析,无工程上下文)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions