Skip to content

Commit a3012cc

Browse files
committed
fix: xpkg_lua_candidates fallback for default namespace full qualified name
When kDefaultNamespace is "mcpplibs", the canonical .lua candidate for cmdline becomes "cmdline.lua". But older index clones (and xlings data dirs with cached index) may still use "mcpplibs.cmdline.lua". Add the full qualified name as a fallback candidate. This fixes the release CI failure where the newly built mcpp couldn't find the index entry during the self-host pack step.
1 parent e5e39de commit a3012cc

1 file changed

Lines changed: 19 additions & 9 deletions

File tree

src/pm/compat.cppm

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -121,33 +121,43 @@ inline std::vector<std::string> xpkg_lua_candidates(std::string_view ns,
121121
std::vector<std::string> candidates;
122122
auto qname = qualified_name(ns, shortName);
123123

124-
// Canonical: <ns>.<shortName>.lua (e.g. "compat.mbedtls.lua",
125-
// "mcpplibs.cmdline.lua") — namespace is part of the filename.
126-
// For default namespace ("mcpp"), canonical is just "<shortName>.lua".
124+
auto fqname = ns.empty() ? std::string(shortName)
125+
: std::format("{}.{}", ns, shortName);
126+
127+
// Canonical: for default namespace → "<shortName>.lua" (e.g. "cmdline.lua")
128+
// for non-default → "<ns>.<shortName>.lua" (e.g. "compat.mbedtls.lua")
127129
if (ns.empty() || ns == mcpp::pm::kDefaultNamespace) {
128130
candidates.push_back(std::string(shortName) + ".lua");
129131
} else {
130-
candidates.push_back(qname + ".lua");
132+
candidates.push_back(fqname + ".lua");
131133
}
132134

133135
// ── Fallback candidates (COMPAT, remove in 1.0.0) ──────────────
134136

135-
// Fallback 1: bare short name — covers mcpplibs packages whose
137+
// Fallback: full qualified name when it differs from qname
138+
// (e.g. default-ns "mcpplibs": qname="cmdline", fqname="mcpplibs.cmdline")
139+
auto qnameFile = qname + ".lua";
140+
auto fqnameFile = fqname + ".lua";
141+
if (fqnameFile != qnameFile &&
142+
fqnameFile != candidates.front()) {
143+
candidates.push_back(fqnameFile);
144+
}
145+
146+
// Fallback: bare short name — covers mcpplibs packages whose
136147
// index files are named "<shortName>.lua" without namespace prefix.
137148
if (!ns.empty() && ns != mcpp::pm::kDefaultNamespace) {
138149
candidates.push_back(std::string(shortName) + ".lua");
139150
}
140151

141-
// Fallback 2: compat.<shortName>.lua — covers compat packages
152+
// Fallback: compat.<shortName>.lua — covers compat packages
142153
// when the caller didn't specify the "compat" namespace.
143154
if (ns.empty() || ns == mcpp::pm::kDefaultNamespace) {
144155
candidates.push_back("compat." + std::string(shortName) + ".lua");
145156
}
146157

147-
// Fallback 3: compat.<qname>.lua — covers edge cases where the
148-
// qualified name itself is used with a compat prefix.
158+
// Fallback: compat variants for non-default/non-compat namespaces.
149159
if (!ns.empty() && ns != mcpp::pm::kDefaultNamespace && ns != "compat") {
150-
candidates.push_back("compat." + qname + ".lua");
160+
candidates.push_back("compat." + fqname + ".lua");
151161
candidates.push_back("compat." + std::string(shortName) + ".lua");
152162
}
153163

0 commit comments

Comments
 (0)