diff options
| author | ruki <[email protected]> | 2023-06-27 22:38:57 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2023-06-27 22:38:57 +0800 |
| commit | 56b94031636d5fbe1025aec13992c00f718ba887 (patch) | |
| tree | fa315a1c3753b91aaddc975c4e16b6b76e954b44 | |
| parent | 015a19627b4cf1a143f3364766c76e95b7df3024 (diff) | |
improve to dump search results
| -rw-r--r-- | xmake/modules/package/manager/xmake/search_package.lua | 53 |
1 files changed, 27 insertions, 26 deletions
diff --git a/xmake/modules/package/manager/xmake/search_package.lua b/xmake/modules/package/manager/xmake/search_package.lua index deeac4c69..b7db68005 100644 --- a/xmake/modules/package/manager/xmake/search_package.lua +++ b/xmake/modules/package/manager/xmake/search_package.lua @@ -24,8 +24,7 @@ import("core.package.package", {alias = "core_package"}) import("private.action.require.impl.repository") -- search package from name -function _search_package_from_name(name, opt) - local results = {} +function _search_package_from_name(packages, name, opt) for _, packageinfo in ipairs(repository.searchdirs(name)) do local package = core_package.load_from_repository(packageinfo.name, packageinfo.packagedir, {repo = packageinfo.repo}) if package then @@ -45,41 +44,43 @@ function _search_package_from_name(name, opt) version = versions[1] end end - results[package:name()] = {name = package:name(), version = version, description = package:get("description"), reponame = repo and repo:name()} + packages[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 = {} +function _search_package_from_description(packages, name, opt) 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 + if not packages[packageinfo.name] then + 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 - else - version = versions[1] end + description = description:gsub(string.ipattern(name), function (w) + return "${bright}" .. w .. "${clear}" + end) + packages[package:name()] = {name = package:name(), version = version, description = description, reponame = repo and repo:name()} 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 @@ -90,8 +91,8 @@ end 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)) + _search_package_from_name(packages, name, opt) + _search_package_from_description(packages, name, opt) local results = {} for name, info in table.orderpairs(packages) do |
