summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2020-02-17 22:49:31 +0800
committerruki <[email protected]>2020-02-17 10:57:07 +0800
commit82752d654d9f34619e7a8f4e39abb9cbdaf0957a (patch)
tree717adf3b1112ff84471d42d758bbe561fa388ce3
parent8368581d63ff27a0edc3928a8a391b2cf3e1e4bc (diff)
improve to require/install and uninstall
-rw-r--r--xmake/actions/require/install.lua25
-rw-r--r--xmake/actions/require/scan.lua2
-rw-r--r--xmake/actions/require/uninstall.lua63
3 files changed, 62 insertions, 28 deletions
diff --git a/xmake/actions/require/install.lua b/xmake/actions/require/install.lua
index 26c624b8f..75f7ec9db 100644
--- a/xmake/actions/require/install.lua
+++ b/xmake/actions/require/install.lua
@@ -132,12 +132,8 @@ function _check_missing_packages(packages)
_g.optional_missing = optional_missing
end
--- install packages
-function main(requires)
-
- -- avoid to run this task repeatly
- if _g.installed then return end
- _g.installed = true
+-- get requires and extra config
+function _get_requires(requires)
-- init requires
local requires_extra = nil
@@ -167,6 +163,23 @@ function main(requires)
requires_extra[require_str] = extrainfo
end
end
+ return requires, requires_extra
+end
+
+-- install packages
+function main(requires)
+
+ -- avoid to run this task repeatly
+ if _g.installed then return end
+ _g.installed = true
+
+ -- get requires and extra config
+ local requires_extra = nil
+ requires, requires_extra = _get_requires(requires)
+ if not requires or #requires == 0 then
+ raise("requires(%s) not found!", table.concat(requires, " "))
+ return
+ end
-- enter environment
environment.enter()
diff --git a/xmake/actions/require/scan.lua b/xmake/actions/require/scan.lua
index 20ea9dee3..abb4a88b9 100644
--- a/xmake/actions/require/scan.lua
+++ b/xmake/actions/require/scan.lua
@@ -51,7 +51,7 @@ function _scan_package(packagedir)
end
local manifest_file = path.join(hashdir, "manifest.txt")
local manifest = os.isfile(manifest_file) and io.load(manifest_file) or nil
- cprintf(" -> ${yellow}%s${clear}: ${green}%s, %s${clear}", hash, manifest.plat, manifest.arch)
+ cprintf(" -> ${yellow}%s${clear}: ${green}%s, %s${clear}", hash, manifest and manifest.plat or "", manifest and manifest.arch or "")
if os.emptydir(hashdir) then
cprintf(", ${red}empty${clear}")
elseif not referenced then
diff --git a/xmake/actions/require/uninstall.lua b/xmake/actions/require/uninstall.lua
index 4c930f502..2ce1d4137 100644
--- a/xmake/actions/require/uninstall.lua
+++ b/xmake/actions/require/uninstall.lua
@@ -26,14 +26,43 @@ import("impl.package")
import("impl.repository")
import("impl.environment")
--- uninstall the given packages
-function main(package_names)
+-- get requires and extra config
+function _get_requires(requires)
- -- no package name?
- if not package_names then
+ -- init requires
+ local requires_extra = nil
+ if not requires then
+ requires, requires_extra = project.requires_str()
+ end
+ if not requires or #requires == 0 then
return
end
+ -- get extra info
+ local extra = option.get("extra")
+ local extrainfo = nil
+ if extra then
+ local v, err = string.deserialize(extra)
+ if err then
+ raise(err)
+ else
+ extrainfo = v
+ end
+ end
+
+ -- force to use the given requires extra info
+ if extrainfo then
+ requires_extra = requires_extra or {}
+ for _, require_str in ipairs(requires) do
+ requires_extra[require_str] = extrainfo
+ end
+ end
+ return requires, requires_extra
+end
+
+-- uninstall the given packages
+function main(requires)
+
-- enter environment
environment.enter()
@@ -42,23 +71,12 @@ function main(package_names)
task.run("repo", {update = true})
end
- -- get project requires
- local project_requires, requires_extra = project.requires_str()
- if not project_requires then
- raise("requires(%s) not found in project!", table.concat(requires, " "))
- end
-
- -- 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() == 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, " "))
+ -- get requires and extra config
+ local requires_extra = nil
+ requires, requires_extra = _get_requires(requires)
+ if not requires or #requires == 0 then
+ raise("requires(%s) not found!", table.concat(requires, " "))
+ return
end
-- uninstall packages
@@ -66,6 +84,9 @@ function main(package_names)
for _, instance in ipairs(packages) do
print("uninstall: %s%s ok!", instance:name(), instance:version_str() and ("-" .. instance:version_str()) or "")
end
+ if #packages == 0 then
+ print("local packages not found!")
+ end
-- leave environment
environment.leave()