summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorruki <[email protected]>2023-06-27 22:37:15 +0800
committerruki <[email protected]>2023-06-27 22:37:15 +0800
commit015a19627b4cf1a143f3364766c76e95b7df3024 (patch)
tree9078b2f16bbd2b61add8f00318c7d49e6945f3d2
parentf2b86d2313b30a29d8a1de6377e5c27da5f4a541 (diff)
improve to search packages #3892
-rw-r--r--xmake/modules/package/manager/xmake/search_package.lua60
-rw-r--r--xmake/modules/private/action/require/search.lua5
2 files changed, 56 insertions, 9 deletions
diff --git a/xmake/modules/package/manager/xmake/search_package.lua b/xmake/modules/package/manager/xmake/search_package.lua
index a299ce992..deeac4c69 100644
--- a/xmake/modules/package/manager/xmake/search_package.lua
+++ b/xmake/modules/package/manager/xmake/search_package.lua
@@ -23,13 +23,8 @@ import("core.base.semver")
import("core.package.package", {alias = "core_package"})
import("private.action.require.impl.repository")
--- search package using the xmake package manager
---
--- @param name the package name with pattern
--- @param opt the options, e.g. {require_version = "1.x"}
---
-function main(name, opt)
- opt = opt or {}
+-- search package from name
+function _search_package_from_name(name, opt)
local results = {}
for _, packageinfo in ipairs(repository.searchdirs(name)) do
local package = core_package.load_from_repository(packageinfo.name, packageinfo.packagedir, {repo = packageinfo.repo})
@@ -50,8 +45,57 @@ function main(name, opt)
version = versions[1]
end
end
- table.insert(results, {name = package:name(), version = version, description = package:get("description"), reponame = repo and repo:name()})
+ results[package:name()] = {name = package:name(), version = version, description = package:get("description"), reponame = repo and repo:name()}
+ end
+ end
+ return results
+end
+
+-- search package from description
+function _search_package_from_description(name, opt)
+ local results = {}
+ for _, packageinfo in ipairs(repository.searchdirs("*")) do
+ local package = core_package.load_from_repository(packageinfo.name, packageinfo.packagedir, {repo = packageinfo.repo})
+ if package then
+ local description = package:description()
+ if description and description:find(string.ipattern(name)) then
+ local repo = package:repo()
+ local version
+ local versions = package:versions()
+ if versions then
+ versions = table.copy(versions)
+ table.sort(versions, function (a, b) return semver.compare(a, b) > 0 end)
+ if opt.require_version then
+ for _, ver in ipairs(versions) do
+ if semver.satisfies(ver, opt.require_version) then
+ version = ver
+ end
+ end
+ else
+ version = versions[1]
+ end
+ end
+ results[package:name()] = {name = package:name(), version = version, description = package:get("description"), reponame = repo and repo:name()}
+ end
end
end
return results
end
+
+-- search package using the xmake package manager
+--
+-- @param name the package name with pattern
+-- @param opt the options, e.g. {require_version = "1.x"}
+--
+function main(name, opt)
+ opt = opt or {}
+ local packages = {}
+ table.join2(packages, _search_package_from_name(name, opt))
+ table.join2(packages, _search_package_from_description(name, opt))
+
+ local results = {}
+ for name, info in table.orderpairs(packages) do
+ table.insert(results, info)
+ end
+ return results
+end
diff --git a/xmake/modules/private/action/require/search.lua b/xmake/modules/private/action/require/search.lua
index 3d8fb573c..12aab16b0 100644
--- a/xmake/modules/private/action/require/search.lua
+++ b/xmake/modules/private/action/require/search.lua
@@ -57,7 +57,10 @@ function main(names)
local version = result.version
local reponame = result.reponame
local description = result.description
- cprint(" -> ${color.dump.string}%s%s${clear}: %s %s", name, version and ("-" .. version) or "", description or "", reponame and ("(in " .. reponame .. ")") or "")
+ cprint(" -> ${color.dump.string}%s%s${clear}: %s %s", name,
+ version and ("-" .. version) or "",
+ description or "",
+ reponame and ("(in " .. reponame .. ")") or "")
end
end
end