--- Module which builds the index.html page to be used in rocks servers. module("luarocks.index", package.seeall) local util = require("luarocks.util") local fs = require("luarocks.fs") local deps = require("luarocks.deps") local persist = require("luarocks.persist") local dir = require("luarocks.dir") local manif = require("luarocks.manif") 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 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 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, deps.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, ', ') .. '"):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