summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2026-01-11 12:02:53 +0800
committerruki <[email protected]>2026-01-11 12:03:00 +0800
commit04c5d66cd8d4b6d4ade83ee80873715e442dd38b (patch)
tree33b6610360fdcffe7ed3f110460ba48555a410b7
parent458849b4ffa70fe12d9cbb17ceb4250502e50784 (diff)
fix package scheme version
-rw-r--r--xmake/modules/private/action/require/impl/package.lua14
1 files changed, 11 insertions, 3 deletions
diff --git a/xmake/modules/private/action/require/impl/package.lua b/xmake/modules/private/action/require/impl/package.lua
index 2d44238db..c25ece5a0 100644
--- a/xmake/modules/private/action/require/impl/package.lua
+++ b/xmake/modules/private/action/require/impl/package.lua
@@ -406,7 +406,8 @@ function _select_package_version(package, requireinfo, locked_requireinfo)
-- select version from schemes
local version, source
- table.remove_if(package:schemes_orderlist(), function (i, scheme)
+ local invalid_schemes = hashset.new()
+ for _, scheme in ipairs(package:schemes_orderlist()) do
local scheme_version, scheme_source = _select_version_from_scheme(scheme, requireinfo)
if scheme_version then
scheme:version_set(scheme_version, scheme_source)
@@ -415,12 +416,19 @@ function _select_package_version(package, requireinfo, locked_requireinfo)
raise("package(%s): the version lists of schemes are mismatch.\n -> scheme(%s): %s not found!",
package:name(), scheme:name(), version)
end
- else
+ elseif #scheme:urls() > 0 then
version = scheme_version
source = scheme_source
+ else
+ invalid_schemes:insert(scheme)
end
else
- -- remove this scheme if version is not matched
+ invalid_schemes:insert(scheme)
+ end
+ end
+ -- remove these invalid schemes if version is not matched
+ table.remove_if(package:schemes_orderlist(), function (_, scheme)
+ if invalid_schemes:has(scheme) then
package:schemes()[scheme:name()] = nil
-- reset current scheme cache, we need to resolve new current scheme
package:current_scheme_set(nil)