summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorapocelipes <[email protected]>2026-08-09 21:23:24 +0800
committerapocelipes <[email protected]>2026-08-09 21:23:24 +0800
commit1193bed28ca75f8f1cc177292f196d9ae03ec598 (patch)
treeb959e4c4c0a950d6af2509cfe6866f10385c2f2c
parent579b9f0ca6126d9d0570a9c76243d7ed142da3fd (diff)
fix: reorder matching
-rw-r--r--core/src/xmake/semver/select.c37
-rwxr-xr-xtests/modules/semver/test.lua7
2 files changed, 25 insertions, 19 deletions
diff --git a/core/src/xmake/semver/select.c b/core/src/xmake/semver/select.c
index f9f3f6424..1da6864e8 100644
--- a/core/src/xmake/semver/select.c
+++ b/core/src/xmake/semver/select.c
@@ -216,26 +216,27 @@ tb_int_t xm_semver_select(lua_State *lua) {
is_range = semver_rangen(&range, range_str, range_len) == 0;
is_exact = xm_semver_is_exact_version(range_str, range_len);
- // attempt to select version from the versions list first
- if ((is_exact || !is_range) &&
- xm_semver_select_from_versions_tags2(lua, 2, range_str, range_len)) {
- ok = tb_true;
- break;
- }
- if (is_range && xm_semver_select_from_versions_tags1(lua, 2, &semver, &range, &matches)) {
- ok = tb_true;
- break;
+ // matching order: versions exact -> tags exact -> versions range -> tags range
+ if (is_exact || !is_range) {
+ if (xm_semver_select_from_versions_tags2(lua, 2, range_str, range_len)) {
+ ok = tb_true;
+ break;
+ }
+ if (xm_semver_select_from_versions_tags2(lua, 3, range_str, range_len)) {
+ ok = tb_true;
+ break;
+ }
}
- // attempt to select version from the tags list
- if ((is_exact || !is_range) &&
- xm_semver_select_from_versions_tags2(lua, 3, range_str, range_len)) {
- ok = tb_true;
- break;
- }
- if (is_range && xm_semver_select_from_versions_tags1(lua, 3, &semver, &range, &matches)) {
- ok = tb_true;
- break;
+ if (is_range) {
+ if (xm_semver_select_from_versions_tags1(lua, 2, &semver, &range, &matches)) {
+ ok = tb_true;
+ break;
+ }
+ if (xm_semver_select_from_versions_tags1(lua, 3, &semver, &range, &matches)) {
+ ok = tb_true;
+ break;
+ }
}
// attempt to select version from the branches
diff --git a/tests/modules/semver/test.lua b/tests/modules/semver/test.lua
index e8cb26177..9ebd2e45c 100755
--- a/tests/modules/semver/test.lua
+++ b/tests/modules/semver/test.lua
@@ -42,7 +42,7 @@ function test_semver_select(t)
, "^1.2.3"
, {"^1.2.3", "1.2.3", "1.9.0"})
- _check_semver_select(t, {"v1.2.3+7", "version"}
+ _check_semver_select(t, {"1.2.3", "tag"}
, "1.2.3"
, {"v1.2.3+7"}
, {"1.2.3"})
@@ -70,6 +70,11 @@ function test_semver_select(t)
, nil
, {"v1.2.3+7", "v1.2.3+8"})
+ _check_semver_select(t, {"v1.2.3+7", "tag"}
+ , "1.2.3+7"
+ , {"1.2.3+8"}
+ , {"v1.2.3+7"})
+
_check_semver_select(t, {"master", "branch"}
, "master"
, {"1.4.0", "1.5.0", "1.5.1"}