Mercurial > repo
view share/lua/5.2/luarocks/validate.lua @ 8065:591b1467ccdf
<int-e> le/rn paste/"Paste" is a short story by Henry James. Its contents has been cut into pieces and distributed over numerous tin boxes on the World Wide Web, little pearls of wisdom buried among ordinary pastes.
author | HackBot |
---|---|
date | Sun, 15 May 2016 13:14:57 +0000 |
parents | d137f631bad5 |
children |
line wrap: on
line source
--- Sandboxed test of build/install of all packages in a repository (unfinished and disabled). module("luarocks.validate", package.seeall) local fs = require("luarocks.fs") local dir = require("luarocks.dir") local path = require("luarocks.path") local cfg = require("luarocks.cfg") local build = require("luarocks.build") local install = require("luarocks.install") local util = require("luarocks.util") help_summary = "Sandboxed test of build/install of all packages in a repository." help = [[ <argument>, if given, is a local repository pathname. ]] local function save_settings(repo) local protocol, path = dir.split_url(repo) table.insert(cfg.rocks_servers, 1, protocol.."://"..path) return { root_dir = cfg.root_dir, rocks_dir = cfg.rocks_dir, deploy_bin_dir = cfg.deploy_bin_dir, deploy_lua_dir = cfg.deploy_lua_dir, deploy_lib_dir = cfg.deploy_lib_dir, } end local function restore_settings(settings) cfg.root_dir = settings.root_dir cfg.rocks_dir = settings.rocks_dir cfg.deploy_bin_dir = settings.deploy_bin_dir cfg.deploy_lua_dir = settings.deploy_lua_dir cfg.deploy_lib_dir = settings.deploy_lib_dir cfg.variables.ROCKS_TREE = settings.rocks_dir cfg.variables.SCRIPTS_DIR = settings.deploy_bin_dir table.remove(cfg.rocks_servers, 1) end local function prepare_sandbox(file) local root_dir = fs.make_temp_dir(file):gsub("/+$", "") cfg.root_dir = root_dir cfg.rocks_dir = path.rocks_dir(root_dir) cfg.deploy_bin_dir = path.deploy_bin_dir(root_dir) cfg.variables.ROCKS_TREE = cfg.rocks_dir cfg.variables.SCRIPTS_DIR = cfg.deploy_bin_dir return root_dir end local function validate_rockspec(file) local ok, err, errcode = build.build_rockspec(file, true, "one") if not ok then util.printerr(err) end return ok, err, errcode end local function validate_src_rock(file) local ok, err, errcode = build.build_rock(file, false, "one") if not ok then util.printerr(err) end return ok, err, errcode end local function validate_rock(file) local ok, err, errcode = install.install_binary_rock(file, "one") if not ok then util.printerr(err) end return ok, err, errcode end local function validate(repo, flags) local results = { ok = {} } local settings = save_settings(repo) local sandbox if flags["quick"] then sandbox = prepare_sandbox("luarocks_validate") end if not fs.exists(repo) then return nil, repo.." is not a local repository." end for _, file in pairs(fs.list_dir(repo)) do for _=1,1 do if file == "manifest" or file == "index.html" then break -- continue for end local pathname = fs.absolute_name(dir.path(repo, file)) if not flags["quick"] then sandbox = prepare_sandbox(file) end local ok, err, errcode util.printout() util.printout("Verifying "..pathname) if file:match("%.rockspec$") then ok, err, errcode = validate_rockspec(pathname, "one") elseif file:match("%.src%.rock$") then ok, err, errcode = validate_src_rock(pathname) elseif file:match("%.rock$") then ok, err, errcode = validate_rock(pathname) end if ok then table.insert(results.ok, {file=file} ) else if not errcode then errcode = "misc" end if not results[errcode] then results[errcode] = {} end table.insert(results[errcode], {file=file, err=err} ) end util.run_scheduled_functions() if not flags["quick"] then fs.delete(sandbox) end repeat until not fs.pop_dir() end end if flags["quick"] then fs.delete(sandbox) end restore_settings(settings) util.title("Results:") util.printout("OK: "..tostring(#results.ok)) for _, entry in ipairs(results.ok) do util.printout(entry.file) end for errcode, errors in pairs(results) do if errcode ~= "ok" then util.printout() util.printout(errcode.." errors: "..tostring(#errors)) for _, entry in ipairs(errors) do util.printout(entry.file, entry.err) end end end util.title("Summary:") local total = 0 for errcode, errors in pairs(results) do util.printout(errcode..": "..tostring(#errors)) total = total + #errors end util.printout("Total: "..total) return true end function run(...) local flags, repo = util.parse_flags(...) repo = repo or cfg.rocks_dir util.printout("Verifying contents of "..repo) return validate(repo, flags) end