diff options
| author | apocelipes <[email protected]> | 2026-08-09 21:23:24 +0800 |
|---|---|---|
| committer | apocelipes <[email protected]> | 2026-08-09 21:23:24 +0800 |
| commit | 1193bed28ca75f8f1cc177292f196d9ae03ec598 (patch) | |
| tree | b959e4c4c0a950d6af2509cfe6866f10385c2f2c | |
| parent | 579b9f0ca6126d9d0570a9c76243d7ed142da3fd (diff) | |
fix: reorder matching
| -rw-r--r-- | core/src/xmake/semver/select.c | 37 | ||||
| -rwxr-xr-x | tests/modules/semver/test.lua | 7 |
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"} |
