summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2018-08-28 23:44:33 +0800
committerruki <[email protected]>2018-08-28 16:27:21 +0800
commitbf54580b06b259017f4a925aff5a58823f04f845 (patch)
treeb6992472977c76c825f34b818d665897fac606b6
parentb8d96694e9fae19c96a9579ccea4333522cc7f7f (diff)
improve to select version for package manager
-rw-r--r--core/src/xmake/semver/select.c16
-rw-r--r--core/src/xmake/semver/semver.c2
-rw-r--r--tests/projects/package/basic/xmake.lua4
-rw-r--r--xmake/actions/require/package.lua39
-rw-r--r--xmake/core/sandbox/modules/import/core/base/semver.lua8
-rw-r--r--xmake/modules/devel/git/checkurl.lua2
6 files changed, 41 insertions, 30 deletions
diff --git a/core/src/xmake/semver/select.c b/core/src/xmake/semver/select.c
index 54cd99831..7481485c8 100644
--- a/core/src/xmake/semver/select.c
+++ b/core/src/xmake/semver/select.c
@@ -112,7 +112,7 @@ static tb_bool_t xm_semver_select_from_branches(lua_State* lua, tb_int_t fromidx
// no matches
return tb_false;
}
-static tb_bool_t xm_semver_select_master_from_versions_tags(lua_State* lua, tb_int_t fromidx, semver_t* semver, semvers_t* matches)
+static tb_bool_t xm_semver_select_lastest_from_versions_tags(lua_State* lua, tb_int_t fromidx, semver_t* semver, semvers_t* matches)
{
// clear matches
semvers_pclear(matches);
@@ -161,7 +161,7 @@ static tb_bool_t xm_semver_select_master_from_versions_tags(lua_State* lua, tb_i
/* select version
*
- * local versioninfo, errors = semver.select(">=1.5.0 <1.6", {"1.5.0", "1.5.1"}, {"v1.5.0", ..}, {"master", "dev"})
+ * local versioninfo, errors = semver.select(">=1.5.0 <1.6", {"1.5.0", "1.5.1"}, {"v1.5.0", ..}, {"lastest", "dev"})
*/
tb_int_t xm_semver_select(lua_State* lua)
{
@@ -210,18 +210,18 @@ tb_int_t xm_semver_select(lua_State* lua)
break;
}
- // select the lastest version from the tags and versions if be master
- if (!tb_strcmp(range_str, "master"))
+ // select the lastest version from the tags and versions if be lastest
+ if (!tb_strcmp(range_str, "lastest"))
{
- // attempt to select master version from the versions list
- if (xm_semver_select_master_from_versions_tags(lua, 2, &semver, &matches))
+ // attempt to select lastest version from the versions list
+ if (xm_semver_select_lastest_from_versions_tags(lua, 2, &semver, &matches))
{
ok = tb_true;
break;
}
- // attempt to select master version from the tags list
- if (xm_semver_select_master_from_versions_tags(lua, 3, &semver, &matches))
+ // attempt to select lastest version from the tags list
+ if (xm_semver_select_lastest_from_versions_tags(lua, 3, &semver, &matches))
{
ok = tb_true;
break;
diff --git a/core/src/xmake/semver/semver.c b/core/src/xmake/semver/semver.c
index 2e417e019..323b96552 100644
--- a/core/src/xmake/semver/semver.c
+++ b/core/src/xmake/semver/semver.c
@@ -19,7 +19,7 @@
* Copyright (C) 2015 - 2018, TBOOX Open Source Group.
*
* @author uael
- * @file semver->c
+ * @file semver.c
*
*/
diff --git a/tests/projects/package/basic/xmake.lua b/tests/projects/package/basic/xmake.lua
index 098a04575..30dfe46dd 100644
--- a/tests/projects/package/basic/xmake.lua
+++ b/tests/projects/package/basic/xmake.lua
@@ -1,6 +1,8 @@
-- requires
-add_requires("zlib >=1.2.11", "tbox ~1.6.0", "pcre2")
+add_requires("tbox master")
+add_requires("zlib >=1.2.11", {optional = true})
+add_requires("pcre2", {system = false})
-- add modes
add_rules("mode.debug", "mode.release")
diff --git a/xmake/actions/require/package.lua b/xmake/actions/require/package.lua
index 3faf9bf41..6ac574ee4 100644
--- a/xmake/actions/require/package.lua
+++ b/xmake/actions/require/package.lua
@@ -37,11 +37,11 @@ import("repository")
--
-- parse require string
--
--- add_requires("tboox.tbox >=1.5.1", "zlib >=1.2.11")
+-- add_requires("tbox >=1.5.1", "zlib >=1.2.11")
-- add_requires("zlib master")
--- add_requires("[email protected] >=1.5.1")
+-- add_requires("xmake-repo@tbox >=1.5.1")
-- add_requires("https://github.com/tboox/[email protected] >=1.5.1")
--- add_requires("tboox.tbox >=1.5.1 <1.6.0", {optional = true, alias = "tbox"})
+-- add_requires("tbox >=1.5.1 <1.6.0", {optional = true, alias = "tbox"})
--
function _parse_require(require_str, requires_extra, parentinfo)
@@ -63,12 +63,13 @@ function _parse_require(require_str, requires_extra, parentinfo)
--
-- .e.g
--
+ -- lastest
-- >=1.5.1 <1.6.0
-- master || >1.4
-- ~1.2.3
-- ^1.1
--
- local version = "master"
+ local version = "lastest"
if #splitinfo > 1 then
version = table.concat(table.slice(splitinfo, 2), " ")
end
@@ -116,11 +117,11 @@ function _parse_require(require_str, requires_extra, parentinfo)
reponame = reponame,
packageurl = packageurl,
version = version,
- alias = require_extra.alias,
- system = require_extra.system,
- option = require_extra.option,
- default = require_extra.default,
- optional = parentinfo.optional or require_extra.optional -- inherit parentinfo.optional
+ alias = require_extra.alias, -- set package alias name
+ system = require_extra.system, -- default: true, we can set it to disable system package manually
+ option = require_extra.option, -- set and attach option
+ default = require_extra.default, -- default: true, we can set it to disable package manually
+ optional = parentinfo.optional or require_extra.optional -- default: false, inherit parentinfo.optional
}
-- save this required item to cache
@@ -330,8 +331,26 @@ function _select_packages_version(packages)
-- exists urls? otherwise be phony package (only as package group)
if #package:urls() > 0 then
+ -- has git url?
+ local has_giturl = false
+ for _, url in ipairs(package:urls()) do
+ if git.checkurl(url) then
+ has_giturl = true
+ break
+ end
+ end
+
-- select package version
- local version, source = semver.select(package:requireinfo().version, package:versions(), {}, {"master"})
+ local source = nil
+ local version = nil
+ local require_version = package:requireinfo().version
+ if require_version == "lastest" or require_version:find('.', 1, true) then -- select version?
+ version, source = semver.select(require_version, package:versions())
+ elseif has_giturl then -- select branch?
+ version, source = require_version, "branches"
+ else
+ raise("package(%s %s): not found!", package:name(), require_version)
+ end
-- save version to package
package:version_set(version, source)
diff --git a/xmake/core/sandbox/modules/import/core/base/semver.lua b/xmake/core/sandbox/modules/import/core/base/semver.lua
index 0a12b94a8..3136323f9 100644
--- a/xmake/core/sandbox/modules/import/core/base/semver.lua
+++ b/xmake/core/sandbox/modules/import/core/base/semver.lua
@@ -73,14 +73,6 @@ end
--
function sandbox_core_base_semver.select(range, versions, tags, branches)
- -- only master?
- versions = table.wrap(versions)
- tags = table.wrap(tags)
- branches = table.wrap(branches)
- if #versions == 0 and #tags == 0 and #branches == 0 and range == "master" then
- return "master", "versions"
- end
-
-- select version
local verinfo, errors = semver.select(range, table.wrap(versions), table.wrap(tags), table.wrap(branches))
if not verinfo then
diff --git a/xmake/modules/devel/git/checkurl.lua b/xmake/modules/devel/git/checkurl.lua
index 19fa2346f..d0b937e1c 100644
--- a/xmake/modules/devel/git/checkurl.lua
+++ b/xmake/modules/devel/git/checkurl.lua
@@ -29,7 +29,5 @@
-- @return true or false
--
function main(url)
-
- -- check it
return url:endswith(".git") or os.isdir(url .. ".git")
end