diff options
| author | ruki <[email protected]> | 2020-02-17 22:49:31 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2020-02-17 10:57:07 +0800 |
| commit | 82752d654d9f34619e7a8f4e39abb9cbdaf0957a (patch) | |
| tree | 717adf3b1112ff84471d42d758bbe561fa388ce3 | |
| parent | 8368581d63ff27a0edc3928a8a391b2cf3e1e4bc (diff) | |
improve to require/install and uninstall
| -rw-r--r-- | xmake/actions/require/install.lua | 25 | ||||
| -rw-r--r-- | xmake/actions/require/scan.lua | 2 | ||||
| -rw-r--r-- | xmake/actions/require/uninstall.lua | 63 |
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() |
