summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2018-12-01 00:53:37 +0800
committerruki <[email protected]>2018-11-30 23:21:48 +0800
commit47b2b81350a97f8434403df141102bcf5b2bb148 (patch)
treecd9ee3519e65a8a5f8ec82df6eb5a995dfb5b24c
parent874d33e13dda991583f0293f4ff5b67ea3544ae5 (diff)
improve to require info and unlink
-rw-r--r--xmake/actions/require/info.lua74
-rw-r--r--xmake/actions/require/list.lua4
-rw-r--r--xmake/actions/require/uninstall.lua36
-rw-r--r--xmake/actions/require/unlink.lua36
-rw-r--r--xmake/core/sandbox/modules/import/lib/detect/find_package.lua2
5 files changed, 94 insertions, 58 deletions
diff --git a/xmake/actions/require/info.lua b/xmake/actions/require/info.lua
index 19a51139f..62f2e9365 100644
--- a/xmake/actions/require/info.lua
+++ b/xmake/actions/require/info.lua
@@ -31,11 +31,33 @@ import("impl.package")
import("impl.repository")
import("impl.environment")
+-- from local/global/system/remote?
+function _from(instance)
+ local fetchinfo, fetchfrom = instance:fetch()
+ if fetchinfo then
+ return ", ${green}" .. fetchfrom .. "${clear}"
+ elseif #instance:urls() > 0 then
+ return instance:supported() and format(", ${yellow}remote${clear}(in %s)", instance:repo():name()) or format(", ${yellow}remote${clear}(${red}unsupported${clear} in %s)", instance:repo():name())
+ elseif instance:from("system") then
+ return ", ${red}missing${clear}"
+ else
+ return ""
+ end
+end
+
+-- get package info
+function _info(instance)
+ local info = instance:version_str() and instance:version_str() or "no version"
+ info = info .. _from(instance)
+ info = info .. (instance:optional() and ", ${yellow}optional${clear}" or "")
+ return info
+end
+
-- show the given package info
-function main(requires)
+function main(package_names)
- -- no requires?
- if not requires then
+ -- no package names?
+ if not package_names then
return
end
@@ -47,33 +69,34 @@ function main(requires)
task.run("repo", {update = true})
end
- -- get extra info
- local extra = option.get("extra")
- local extrainfo = nil
- if extra then
- local tmpfile = os.tmpfile() .. ".lua"
- io.writefile(tmpfile, "{" .. extra .. "}")
- extrainfo = io.load(tmpfile)
- os.tryrm(tmpfile)
+ -- show title
+ print("The package info of project:")
+
+ -- get project requires
+ local project_requires, requires_extra = project.get("requires"), project.get("__extra_requires")
+ if not project_requires then
+ raise("requires(%s) not found in project!", table.concat(requires, " "))
end
- -- init requires extra info
- local requires_extra = {}
- if extrainfo then
- for _, require_str in ipairs(requires) do
- requires_extra[require_str] = extrainfo
+ -- find required package in project
+ local requires = {}
+ for _, name in ipairs(package_names) do
+ for _, require_str in ipairs(project_requires) do
+ if require_str:split(' ')[1]:lower():find(name:lower()) then
+ table.insert(requires, require_str)
+ end
end
end
-
- -- show title
- print("The package infos:")
+ if #requires == 0 then
+ raise("%s not found in project!", table.concat(package_names, " "))
+ end
-- list all packages
- for _, instance in ipairs(package.load_packages(requires, extrainfo and {requires_extra = requires_extra} or nil)) do
+ for _, instance in ipairs(package.load_packages(requires, requires_extra)) do
-- show package name
local requireinfo = instance:requireinfo() or {}
- cprint(" ${magenta}require${clear}(%s):", requireinfo.originstr)
+ cprint(" ${magenta}require${clear}(%s): ", requireinfo.originstr)
-- show description
local description = instance:get("description")
@@ -122,6 +145,15 @@ function main(requires)
-- show install directory
cprint(" -> ${magenta}installdir${clear}: %s", instance:installdir())
+ -- show fetch info
+ cprint(" -> ${magenta}fetchinfo${clear}: %s", _info(instance))
+ local fetchinfo = instance:fetch()
+ if fetchinfo then
+ for name, info in pairs(fetchinfo) do
+ cprint(" -> ${magenta}%s${clear}: %s", name, table.concat(table.wrap(info), " "))
+ end
+ end
+
-- end
print("")
end
diff --git a/xmake/actions/require/list.lua b/xmake/actions/require/list.lua
index e42b3abdd..eb5d11f87 100644
--- a/xmake/actions/require/list.lua
+++ b/xmake/actions/require/list.lua
@@ -55,7 +55,7 @@ end
function main()
-- list all requires
- print("The package dependencies:")
+ print("The package dependencies of project:")
-- get requires
local requires, requires_extra = project.get("requires"), project.get("__extra_requires")
@@ -80,7 +80,7 @@ function main()
local fetchinfo = instance:fetch()
if fetchinfo then
for name, info in pairs(fetchinfo) do
- print(" -> %s: %s", name, table.concat(table.wrap(info), " "))
+ cprint(" -> ${magenta}%s${clear}: %s", name, table.concat(table.wrap(info), " "))
end
end
end
diff --git a/xmake/actions/require/uninstall.lua b/xmake/actions/require/uninstall.lua
index 8b25146f8..c95b33a31 100644
--- a/xmake/actions/require/uninstall.lua
+++ b/xmake/actions/require/uninstall.lua
@@ -25,15 +25,16 @@
-- imports
import("core.base.task")
import("core.base.option")
+import("core.project.project")
import("impl.package")
import("impl.repository")
import("impl.environment")
--- show the given package info
-function main(requires)
+-- uninstall the given packages
+function main(package_names)
- -- no requires?
- if not requires then
+ -- no package name?
+ if not package_names then
return
end
@@ -45,23 +46,24 @@ function main(requires)
task.run("repo", {update = true})
end
- -- get extra info
- local extra = option.get("extra")
- local extrainfo = nil
- if extra then
- local tmpfile = os.tmpfile() .. ".lua"
- io.writefile(tmpfile, "{" .. extra .. "}")
- extrainfo = io.load(tmpfile)
- os.tryrm(tmpfile)
+ -- get project requires
+ local project_requires, requires_extra = project.get("requires"), project.get("__extra_requires")
+ if not project_requires then
+ raise("requires(%s) not found in project!", table.concat(requires, " "))
end
- -- init requires extra info
- local requires_extra = {}
- if extrainfo then
- for _, require_str in ipairs(requires) do
- requires_extra[require_str] = extrainfo
+ -- find required package in project
+ local requires = {}
+ for _, name in ipairs(package_names) do
+ for _, require_str in ipairs(project_requires) do
+ if require_str:split(' ')[1]:lower():find(name:lower()) then
+ table.insert(requires, require_str)
+ end
end
end
+ if #requires == 0 then
+ raise("%s not found in project!", table.concat(package_names, " "))
+ end
-- uninstall packages
local packages = package.uninstall_packages(requires, {requires_extra = requires_extra})
diff --git a/xmake/actions/require/unlink.lua b/xmake/actions/require/unlink.lua
index 8aba0d8f5..4a74efe86 100644
--- a/xmake/actions/require/unlink.lua
+++ b/xmake/actions/require/unlink.lua
@@ -25,15 +25,16 @@
-- imports
import("core.base.task")
import("core.base.option")
+import("core.project.project")
import("impl.package")
import("impl.repository")
import("impl.environment")
--- show the given package info
-function main(requires)
+-- unlink the given packages
+function main(package_names)
- -- no requires?
- if not requires then
+ -- no package names?
+ if not package_names then
return
end
@@ -45,23 +46,24 @@ function main(requires)
task.run("repo", {update = true})
end
- -- get extra info
- local extra = option.get("extra")
- local extrainfo = nil
- if extra then
- local tmpfile = os.tmpfile() .. ".lua"
- io.writefile(tmpfile, "{" .. extra .. "}")
- extrainfo = io.load(tmpfile)
- os.tryrm(tmpfile)
+ -- get project requires
+ local project_requires, requires_extra = project.get("requires"), project.get("__extra_requires")
+ if not project_requires then
+ raise("requires(%s) not found in project!", table.concat(requires, " "))
end
- -- init requires extra info
- local requires_extra = {}
- if extrainfo then
- for _, require_str in ipairs(requires) do
- requires_extra[require_str] = extrainfo
+ -- find required package in project
+ local requires = {}
+ for _, name in ipairs(package_names) do
+ for _, require_str in ipairs(project_requires) do
+ if require_str:split(' ')[1]:lower():find(name:lower()) then
+ table.insert(requires, require_str)
+ end
end
end
+ if #requires == 0 then
+ raise("%s not found in project!", table.concat(package_names, " "))
+ end
-- unlink packages
local packages = package.unlink_packages(requires, {requires_extra = requires_extra})
diff --git a/xmake/core/sandbox/modules/import/lib/detect/find_package.lua b/xmake/core/sandbox/modules/import/lib/detect/find_package.lua
index e1ca78486..3b7446442 100644
--- a/xmake/core/sandbox/modules/import/lib/detect/find_package.lua
+++ b/xmake/core/sandbox/modules/import/lib/detect/find_package.lua
@@ -501,7 +501,7 @@ function sandbox_lib_detect_find_package.main(name, opt)
result = sandbox_lib_detect_find_package._find(name, opt)
-- match version?
- if opt.version then
+ if opt.version and result then
if not result.version or not semver.satisfies(result.version, opt.version) then
result = nil
end