diff options
| author | ruki <[email protected]> | 2024-10-22 23:24:31 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2024-10-22 23:24:31 +0800 |
| commit | ddbef7afc5573db90df1af0ed0bde9f681905e98 (patch) | |
| tree | 5dda169eaa278e553cee364dc03d19f9089837e2 /xmake/modules/package | |
| parent | 9a7d7d8f5b90ab09a0bfc90f7cfd4750a729cef6 (diff) | |
improve and cache searchdirs #5744
Diffstat (limited to 'xmake/modules/package')
| -rw-r--r-- | xmake/modules/package/manager/xmake/search_package.lua | 88 |
1 files changed, 27 insertions, 61 deletions
diff --git a/xmake/modules/package/manager/xmake/search_package.lua b/xmake/modules/package/manager/xmake/search_package.lua index 6c12a4dcc..175af81c1 100644 --- a/xmake/modules/package/manager/xmake/search_package.lua +++ b/xmake/modules/package/manager/xmake/search_package.lua @@ -20,69 +20,38 @@ -- imports import("core.base.semver") -import("core.package.package", {alias = "core_package"}) -import("private.action.require.impl.repository") +import("private.xrepo.quick_search.cache") --- search package from name -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 - 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 +function _search_package(packages, name, opt) + for _, packageinfo in ipairs(cache.find(name, {description = opt.description ~= false})) do + local packagename = packageinfo.name + local packagedata = packageinfo.data + + local version + local versions = packageinfo.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 - else - version = versions[1] end - end - if not opt.require_version or version then - packages[package:name()] = {name = package:name(), version = version, description = package:get("description"), reponame = repo and repo:name()} + else + version = versions[1] end end - end -end --- search package from description -function _search_package_from_description(packages, name, opt) - for _, packageinfo in ipairs(repository.searchdirs("*")) do - 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 - end - description = description:gsub(string.ipattern(name), function (w) - return "${bright}" .. w .. "${clear}" - end) - if not opt.require_version or version then - packages[package:name()] = {name = package:name(), version = version, description = description, reponame = repo and repo:name()} - end - end - end + local description = packagedata.description + if description then + description = description:gsub(string.ipattern(name), function (w) + return "${bright}" .. w .. "${clear}" + end) + end + + if not opt.require_version or version then + packages[packagename] = {name = packagename, version = version, description = description, reponame = packagedata.reponame} end end end @@ -95,10 +64,7 @@ end function main(name, opt) opt = opt or {} local packages = {} - _search_package_from_name(packages, name, opt) - if opt.description ~= false then - _search_package_from_description(packages, name, opt) - end + _search_package(packages, name, opt) local results = {} for name, info in table.orderpairs(packages) do |
