summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2026-01-27 15:18:36 +0800
committerGitHub <[email protected]>2026-01-27 15:18:36 +0800
commite4c2c271e71fb51efe6e3bf7908e61838a13b695 (patch)
tree9990cd4150999322cdc95f5fe28bacf42bcb5d03
parentefe8fc122c04fb05a80488e39ddb19d802e6a409 (diff)
parent8881aba7553a4298eaac93f218c7b43ecbca05cd (diff)
Merge pull request #7270 from xmake-io/scheme
improve to select scheme version
-rw-r--r--xmake/modules/private/action/require/impl/package.lua18
1 files changed, 18 insertions, 0 deletions
diff --git a/xmake/modules/private/action/require/impl/package.lua b/xmake/modules/private/action/require/impl/package.lua
index e1fdba178..ebd6e34d3 100644
--- a/xmake/modules/private/action/require/impl/package.lua
+++ b/xmake/modules/private/action/require/impl/package.lua
@@ -362,6 +362,7 @@ function _select_version_from_scheme(scheme, requireinfo)
local require_verify = requireinfo.verify
local is_system = requireinfo.system
local has_versionlist = scheme:get("versions") or scheme:get("versionfiles")
+ -- We need to strictly limit the number of valid URLs to filter out schemes that don't have any URLs, prioritizing them.
if #urls > 0 and (not has_versionlist or require_verify == false)
and (semver.is_valid(require_version) or semver.is_valid_range(require_version)) then
-- no version list in package() or need not verify sha256sum? try selecting this version directly
@@ -425,6 +426,23 @@ function _select_package_version(package, requireinfo, locked_requireinfo)
end
end
if not version then
+ -- If no version is available for any scheme and no URLs are available, we will use the specified version by default.
+ -- https://github.com/xmake-io/xmake/issues/7265
+ local require_version = requireinfo.version
+ local require_verify = requireinfo.verify
+ local current_scheme = package:current_scheme()
+ local has_versionlist = current_scheme:get("versions") or current_scheme:get("versionfiles")
+ if (not has_versionlist or require_verify == false)
+ and (semver.is_valid(require_version) or semver.is_valid_range(require_version)) then
+ local scheme_version = require_version
+ local scheme_source = "version"
+ scheme_version_map[current_scheme] = scheme_version
+ current_scheme:version_set(scheme_version, scheme_source)
+ version = scheme_version
+ source = scheme_source
+ end
+ end
+ if not version then
version = version_latest
source = source_latest
end