diff options
| author | ruki <[email protected]> | 2018-12-01 00:53:37 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2018-11-30 23:21:48 +0800 |
| commit | 47b2b81350a97f8434403df141102bcf5b2bb148 (patch) | |
| tree | cd9ee3519e65a8a5f8ec82df6eb5a995dfb5b24c | |
| parent | 874d33e13dda991583f0293f4ff5b67ea3544ae5 (diff) | |
improve to require info and unlink
| -rw-r--r-- | xmake/actions/require/info.lua | 74 | ||||
| -rw-r--r-- | xmake/actions/require/list.lua | 4 | ||||
| -rw-r--r-- | xmake/actions/require/uninstall.lua | 36 | ||||
| -rw-r--r-- | xmake/actions/require/unlink.lua | 36 | ||||
| -rw-r--r-- | xmake/core/sandbox/modules/import/lib/detect/find_package.lua | 2 |
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 |
