From 20488302b00fed7675c65280c84db078c64ee36f Mon Sep 17 00:00:00 2001
From: V1K1NGbg
-Lua modules available from this location for use with LuaRocks:
- $package - $summary $detailed
-manifest file
-]]
-local index_manifest_ver = [[
-• Lua $VER manifest file (zip)
-]]
-local index_footer_end = [[
- External dependencies: ' .. table.concat(deplist, ', ').. 'Available rocks
-
-]]
-
-local index_package_begin = [[
-
-
-
-
-
-$externaldependencies
-latest sources $homepage | License: $license
-]]
-
-local index_package_end = [[
-
-
-]]
-
-local index_footer_begin = [[
-
'
- 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 = [[ + + +
++Lua modules available from this location for use with LuaRocks: +
+
+ $package - $summary
|
++]] + +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, ', ') .. '"):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