From 20488302b00fed7675c65280c84db078c64ee36f Mon Sep 17 00:00:00 2001 From: V1K1NGbg Date: Thu, 22 Aug 2024 17:49:07 -0300 Subject: Teal: convert luarocks.admin.index --- src/luarocks/admin/index.lua | 185 ----------------------------------------- src/luarocks/admin/index.tl | 190 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 190 insertions(+), 185 deletions(-) delete mode 100644 src/luarocks/admin/index.lua create mode 100644 src/luarocks/admin/index.tl diff --git a/src/luarocks/admin/index.lua b/src/luarocks/admin/index.lua deleted file mode 100644 index 64c8c1eb..00000000 --- a/src/luarocks/admin/index.lua +++ /dev/null @@ -1,185 +0,0 @@ - ---- Module which builds the index.html page to be used in rocks servers. -local index = {} - -local util = require("luarocks.util") -local fs = require("luarocks.fs") -local vers = require("luarocks.core.vers") -local persist = require("luarocks.persist") -local dir = require("luarocks.dir") -local manif = require("luarocks.manif") - -local ext_url_target = ' target="_blank"' - -local index_header = [[ - - - -Available rocks - - - - -

Available rocks

-

-Lua modules available from this location for use with LuaRocks: -

- -]] - -local index_package_begin = [[ - - - -]] - -local index_footer_begin = [[ -
-

$package - $summary
-

$detailed
-$externaldependencies -latest sources $homepage | License: $license

-
-]] - -local index_package_end = [[ -
-

-manifest file -]] -local index_manifest_ver = [[ -• Lua $VER manifest file (zip) -]] -local index_footer_end = [[ -

- - -]] - -function index.format_external_dependencies(rockspec) - if rockspec.external_dependencies then - local deplist = {} - local listed_set = {} - local plats = nil - for name, desc in util.sortedpairs(rockspec.external_dependencies) do - if name ~= "platforms" then - table.insert(deplist, name:lower()) - listed_set[name] = true - else - plats = desc - end - end - if plats then - for plat, entries in util.sortedpairs(plats) do - for name, desc in util.sortedpairs(entries) do - if not listed_set[name] then - table.insert(deplist, name:lower() .. " (on "..plat..")") - end - end - end - end - return '

External dependencies: ' .. table.concat(deplist, ', ').. '

' - else - return "" - end -end - -function index.make_index(repo) - if not fs.is_dir(repo) then - return nil, "Cannot access repository at "..repo - end - local manifest = manif.load_manifest(repo) - local out = io.open(dir.path(repo, "index.html"), "w") - - out:write(index_header) - for package, version_list in util.sortedpairs(manifest.repository) do - local latest_rockspec = nil - local output = index_package_begin - for version, data in util.sortedpairs(version_list, vers.compare_versions) do - local versions = {} - output = output..version..': ' - table.sort(data, function(a,b) return a.arch < b.arch end) - for _, item in ipairs(data) do - local file - if item.arch == 'rockspec' then - file = ("%s-%s.rockspec"):format(package, version) - if not latest_rockspec then latest_rockspec = file end - else - file = ("%s-%s.%s.rock"):format(package, version, item.arch) - end - table.insert(versions, ''..item.arch..'') - end - output = output .. table.concat(versions, ', ') .. '
' - end - output = output .. index_package_end - if latest_rockspec then - local rockspec = persist.load_into_table(dir.path(repo, latest_rockspec)) - local descript = rockspec.description or {} - local vars = { - anchor = package, - package = rockspec.package, - original = rockspec.source.url, - summary = descript.summary or "", - detailed = descript.detailed or "", - license = descript.license or "N/A", - homepage = descript.homepage and ('| project homepage') or "", - externaldependencies = index.format_external_dependencies(rockspec) - } - vars.detailed = vars.detailed:gsub("\n\n", "

"):gsub("%s+", " ") - vars.detailed = vars.detailed:gsub("(https?://[a-zA-Z0-9%.%%-_%+%[%]=%?&/$@;:]+)", '%1') - output = output:gsub("$(%w+)", vars) - else - output = output:gsub("$anchor", package) - output = output:gsub("$package", package) - output = output:gsub("$(%w+)", "") - end - out:write(output) - end - out:write(index_footer_begin) - for ver in util.lua_versions() do - out:write((index_manifest_ver:gsub("$VER", ver))) - end - out:write(index_footer_end) - out:close() -end - -return index diff --git a/src/luarocks/admin/index.tl b/src/luarocks/admin/index.tl new file mode 100644 index 00000000..2cd47baf --- /dev/null +++ b/src/luarocks/admin/index.tl @@ -0,0 +1,190 @@ + +--- Module which builds the index.html page to be used in rocks servers. +local record index +end + +local util = require("luarocks.util") +local fs = require("luarocks.fs") +local vers = require("luarocks.core.vers") +local persist = require("luarocks.persist") +local dir = require("luarocks.dir") +local manif = require("luarocks.manif") + +local type Rockspec = require("luarocks.core.types.rockspec").Rockspec + +local type Entry = require("luarocks.core.types.manifest").Manifest.Entry + +local ext_url_target = ' target="_blank"' + +local index_header = [[ + + + +Available rocks + + + + +

Available rocks

+

+Lua modules available from this location for use with LuaRocks: +

+ +]] + +local index_package_begin = [[ + + + +]] + +local index_footer_begin = [[ +
+

$package - $summary
+

$detailed
+$externaldependencies +latest sources $homepage | License: $license

+
+]] + +local index_package_end = [[ +
+

+manifest file +]] +local index_manifest_ver = [[ +• Lua $VER manifest file (zip) +]] +local index_footer_end = [[ +

+ + +]] + +function index.format_external_dependencies(rockspec: Rockspec): string + if rockspec.external_dependencies then + local deplist = {} + local listed_set: {string: boolean} = {} + local plats: {string : {string: string}} = nil + for name, desc in util.sortedpairs(rockspec.external_dependencies) do + if name ~= "platforms" then + table.insert(deplist, name:lower()) + listed_set[name] = true + else + plats = desc as {string : {string: string}} + end + end + if plats then + for plat, entries in util.sortedpairs(plats) do + for name, desc in util.sortedpairs(entries) do + if not listed_set[name] then + table.insert(deplist, name:lower() .. " (on "..plat..")") + end + end + end + end + return '

External dependencies: ' .. table.concat(deplist, ', ').. '

' + else + return "" + end +end + +function index.make_index(repo: string): boolean, string + if not fs.is_dir(repo) then + return nil, "Cannot access repository at "..repo + end + local manifest = manif.load_manifest(repo) + local out = io.open(dir.path(repo, "index.html"), "w") + + out:write(index_header) + for package, version_list in util.sortedpairs(manifest.repository) do + local latest_rockspec: string = nil + local output = index_package_begin + for version, data in util.sortedpairs(version_list, vers.compare_versions) do + local versions = {} + output = output..version..': ' + table.sort(data, function(a: Entry,b: Entry): boolean return a.arch < b.arch end) + for _, item in ipairs(data) do + local file: string + if item.arch == 'rockspec' then + file = ("%s-%s.rockspec"):format(package, version) + if not latest_rockspec then latest_rockspec = file end + else + file = ("%s-%s.%s.rock"):format(package, version, item.arch) + end + table.insert(versions, ''..item.arch..'') + end + output = output .. table.concat(versions, ', ') .. '
' + end + output = output .. index_package_end + if latest_rockspec then + local rockspec = persist.load_into_table(dir.path(repo, latest_rockspec)) as Rockspec + local descript = rockspec.description or {} + local vars = { + anchor = package, + package = rockspec.package, + original = rockspec.source.url, + summary = descript.summary or "", + detailed = descript.detailed or "", + license = descript.license or "N/A", + homepage = descript.homepage and ('| project homepage') or "", + externaldependencies = index.format_external_dependencies(rockspec) + } + vars.detailed = vars.detailed:gsub("\n\n", "

"):gsub("%s+", " ") + vars.detailed = vars.detailed:gsub("(https?://[a-zA-Z0-9%.%%-_%+%[%]=%?&/$@;:]+)", '%1') + output = output:gsub("$(%w+)", vars) + else + output = output:gsub("$anchor", package) + output = output:gsub("$package", package) + output = output:gsub("$(%w+)", "") + end + out:write(output) + end + out:write(index_footer_begin) + for ver in util.lua_versions() do + out:write((index_manifest_ver:gsub("$VER", ver))) + end + out:write(index_footer_end) + out:close() +end + +return index -- cgit v1.2.3-55-g6feb