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 index_header = [[ Available rocks

Available rocks

Lua modules available from this location for use with LuaRocks:

]] local index_package_start = [[ ]] local index_footer = [[

$package - $summary

$detailed
latest sources $homepage | License: $license

]] local index_package_end = [[

manifest file

]] 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_start for version, data in util.sortedpairs(version_list, deps.compare_versions) do local out_versions = {} local arches = 0 output = output..version local sep = ': ' for _, item in ipairs(data) do output = output .. sep .. ''..item.arch..'' sep = ', ' if item.arch == 'rockspec' then local rs = ("%s-%s.rockspec"):format(package, version) if not latest_rockspec then latest_rockspec = rs end output = output:gsub("$url", rs) else output = output:gsub("$url", ("%s-%s.%s.rock"):format(package, version, item.arch)) end end output = output .. '
' output = output:gsub("$na", arches) end output = output .. index_package_end if latest_rockspec then local rockspec = persist.load_into_table(dir.path(repo, latest_rockspec)) local vars = { anchor = package, package = rockspec.package, original = rockspec.source.url, summary = rockspec.description.summary or "", detailed = rockspec.description.detailed or "", license = rockspec.description.license or "N/A", homepage = rockspec.description.homepage and ("| project homepage") or "" } vars.detailed = vars.detailed:gsub("\n\n", "

"):gsub("%s+", " ") 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) out:close() end